tutorial sirve que para nodejs node logger example node.js logging express

node.js - sirve - nodejs logger



¿Cómo usar Morgan logger? (7)

Creo que tengo una manera en la que puede que no obtenga exactamente lo que quiere, pero puede integrar el registro de Morgan con log4js, en otras palabras, toda su actividad de registro puede ir al mismo lugar. Espero que este compendio de un servidor Express sea más o menos fácil de comprender:

var express = require("express"); var log4js = require("log4js"); var morgan = require("morgan"); ... var theAppLog = log4js.getLogger(); var theHTTPLog = morgan({ "format": "default", "stream": { write: function(str) { theAppLog.debug(str); } } }); .... var theServer = express(); theServer.use(theHTTPLog);

Ahora puedes escribir lo que quieras en AppLog y Morgan escribirá lo que quiera en el mismo lugar, utilizando los mismos anexos, etc. Por supuesto, puedes llamar a info () o lo que quieras en el contenedor de flujo en lugar de depurar () - Eso solo refleja el nivel de registro que desea otorgar al registro de recursos / res de Morgan.

No puedo iniciar sesión con Morgan. No registra información en la consola. La documentación no dice cómo usarlo.

Quiero ver qué es una variable. Este es un código del archivo response.js del framework expressjs:

var logger = require("morgan"); res.render = function(view, options, fn){ options = options || {}; var self = this; var req = this.req; var app = req.app; // support callback function as second arg if (''function'' == typeof options) { fn = options, options = {}; } // merge res.locals options._locals = self.locals; // default callback to respond fn = fn || function(err, str){ if (err) return req.next(err); self.send(str); }; // Here I want to see what fn is // But it doesn''t show me anything in console // How to use it? logger(fn); // render app.render(view, options, fn); };

Cómo usar Morgan?


Es posible que desee intentar usar mongo-morgan-ext

El uso es:

var logger = require(''mongo-morgan-ext''); var db = ''mongodb://localhost:27017/MyDB''; var collection = ''Logs'' var skipfunction = function(req, res) { return res.statusCode > 399; } //Thiw would skip if HTTP request response is less than 399 i.e no errors. app.use(logger(db,collection,skipfunction)); //In your express-application

El resultado esperado es

{ "RequestID": "", "status": "", "method": "", "Remote-user": "", "Remote-address": "", "URL": "", "HTTPversion": "", "Response-time": "", "date":"", "Referrer": "", "REQUEST": { //10 "Accept": "", "Accept-Charset": "", "Accept-Encoding": "", "Accept-Language": "", "Authorization": "", "Cache-Control": "", "Connection": "", "Cookie": "", "Content-Length": "", "Content-MD5": "", "Content-Type": "", "Expect": "", "Forwarded": "", "From": "", "Host": "", "Max-Forwards": "", "Origin": "", "Pragma": "", "Proxy-Authorization": "", "Range": "", "TE": "", "User-Agent": "", "Via": "", "Warning": "", "Upgrade": "", "Referer": "", "Date": "", "X-requested-with": "", "X-Csrf-Token": "", "X-UIDH": "", "Proxy-Connection": "", "X-Wap-Profile": "", "X-ATT-DeviceId": "", "X-Http-Method-Override":"", "Front-End-Https": "", "X-Forwarded-Proto": "", "X-Forwarded-Host": "", "X-Forwarded-For": "", "DNT": "", "Accept-Datetime": "", "If-Match": "", "If-Modified-Since": "", "If-None-Match": "", "If-Range": "", "If-Unmodified-Since": "" }, "RESPONSE": { "Status": "", "Content-MD5":"", "X-Frame-Options": "", "Accept-Ranges": "", "Age": "", "Allow": "", "Cache-Control": "", "Connection": "", "Content-Disposition": "", "Content-Encoding": "", "Content-Language": "", "Content-Length": "", "Content-Location": "", "Content-Range": "", "Content-Type":"", "Date":"", "Last-Modified": "", "Link": "", "Location": "", "P3P": "", "Pragma": "", "Proxy-Authenticate": "", "Public-Key-Pins": "", "Retry-After": "", "Server": "", "Trailer": "", "Transfer-Encoding": "", "TSV": "", "Upgrade": "", "Vary": "", "Via": "", "Warning": "", "WWW-Authenticate": "", "Expires": "", "Set-Cookie": "", "Strict-Transport-Security": "", "Refresh":"", "Access-Control-Allow-Origin": "", "X-XSS-Protection": "", "X-WebKit-CSP":"", "X-Content-Security-Policy": "", "Content-Security-Policy": "", "X-Content-Type-Options": "", "X-Powered-By": "", "X-UA-Compatible": "", "X-Content-Duration": "", "Upgrade-Insecure-Requests": "", "X-Request-ID": "", "ETag": "", "Accept-Patch": "" } }


Me enfrenté al mismo problema hace tiempo y, en cambio, utilicé Winston. Como mencionan arriba, morgan es para el registro automático de solicitud / respuesta. Winston se puede configurar más o menos de la misma manera que log4Net / log4J, tiene niveles de gravedad, diferentes flujos a los que puede conectarse, etc.

Por ejemplo:

npm install winston

Luego, si llama al código siguiente en algún lugar de la inicialización de su aplicación:

var winston = require(''winston''); // setup default logger (no category) winston.loggers.add(''default'', { console: { colorize: ''true'', handleExceptions: true, json: false, level: ''silly'', label: ''default'', }, file: { filename: ''some/path/where/the/log/file/reside/default.log'', level: ''silly'', json: false, handleExceptions: true, }, }); // // setup logger for category `usersessions` // you can define as many looggers as you like // winston.loggers.add(''usersessions'', { console: { level: ''silly'', colorize: ''true'', label: ''usersessions'', json: false, handleExceptions: true, }, file: { filename: ''some/path/where/the/log/file/reside/usersessions.log'', level: ''silly'', json: false, handleExceptions: true, }, });

nota: antes de llamar al código anterior, winston.loggers está vacío, es decir, aún no tienes ningún registrador configurado. Al igual que los métodos Log4Net / J XmlConfigure, primero debe llamarlos para iniciar su registro.

Luego, más adelante, en cualquier lugar del código del lado del servidor de aplicaciones, puede hacer lo siguiente:

var winston = require(''winston''); // log instances as defined in first snippet var defaultLog = winston.loggers.get(''default''); var userSessionsLog = winston.loggers.get(''usersessions''); defaultLog.info(''this goes to file default.log''); userSessionsLog.debug(''this goes to file usersessions.log'')

Espero que ayude.

para más referencia de documentación: https://www.npmjs.com/package/winston


Morgan no debería usarse para iniciar sesión de la manera que estás describiendo. Morgan se creó para hacer el registro de la misma manera que servidores como Apache y Nginx inician sesión en error_log o access_log. Como referencia, así es como usas morgan:

var express = require(''express''), app = express(), morgan = require(''morgan''); // Require morgan before use // You can set morgan to log differently depending on your environment if (app.get(''env'') == ''production'') { app.use(morgan(''common'', { skip: function(req, res) { return res.statusCode < 400 }, stream: __dirname + ''/../morgan.log'' })); } else { app.use(morgan(''dev'')); }

Tenga en cuenta la línea de producción donde ve a Morgan llamado con un hash de opciones {skip: ..., stream: __dirname + ''/../morgan.log''}

La propiedad de stream de ese objeto determina dónde se genera el registrador. Por defecto es STDOUT (su consola, tal como lo desea) pero solo registrará datos de solicitud. No va a hacer lo que hace console.log() .

Si desea inspeccionar cosas sobre la marcha, utilice la biblioteca de utilidades incorporada:

var util = require(''util''); console.log(util.inspect(anyObject)); // Will give you more details than console.log

Entonces, la respuesta a su pregunta es que está haciendo una pregunta incorrecta. Pero si aún desea usar Morgan para registrar solicitudes, ahí lo tiene.


Morgan: - Morgan es un middleware que nos ayudará a identificar a los clientes que están accediendo a nuestra aplicación. Básicamente un registrador.

Para utilizar Morgan, debemos seguir los siguientes pasos:

  1. Instala el morgan usando el siguiente comando:

npm install --save morgan

Esto agregará morgan al archivo json.package

  1. Incluye el morgan en tu proyecto

var morgan = require(''morgan'');

3> // crea una secuencia de escritura (en el modo de agregar)

var accessLogStream = fs.createWriteStream( path.join(__dirname, ''access.log''), {flags: ''a''} ); // setup the logger app.use(morgan(''combined'', {stream: accessLogStream}));

Nota: asegúrese de no aplomar arriba ciegamente, asegúrese de tener todas las condiciones que necesite.

Arriba, se creará automáticamente un archivo access.log en su raíz una vez que el usuario acceda a su aplicación.


Parece que también estás confundido con lo mismo que yo, la razón por la que me encontré con esta pregunta. Creo que asociamos el registro con el registro manual como lo haríamos en Java con log4j (si conoce Java) donde instanciamos un Logger y decimos ''esto''.

Luego busqué el código morgan, resulta que no es ese tipo de registrador, es para el registro automatizado de solicitudes, respuestas y datos relacionados. Cuando se agrega como middleware a una aplicación express / connect, de forma predeterminada debe registrar las declaraciones en stdout mostrando los detalles de: ip remota, método de solicitud, versión http, estado de respuesta, agente de usuario, etc. Le permite modificar el registro utilizando tokens o agrega color a ellos definiendo ''dev'' o incluso iniciando sesión en una secuencia de salida, como un archivo.

Para el propósito que pensamos que podemos usar, como en este caso, todavía tenemos que usar:

console.log(..);

O si desea que la salida sea bonita para los objetos:

var util = require("util"); console.log(util.inspect(..));


var express = require(''express''); var fs = require(''fs''); var morgan = require(''morgan'') var app = express(); // create a write stream (in append mode) var accessLogStream = fs.createWriteStream(__dirname + ''/access.log'',{flags: ''a''}); // setup the logger app.use(morgan(''combined'', {stream: accessLogStream})) app.get(''/'', function (req, res) { res.send(''hello, world!'') });

ejemplo nodejs + express + morgan