nodejs - ¿Cómo puedo agregar la marca de tiempo a los registros usando la biblioteca de Node.js Winston?
npm (7)
Quiero agregar la marca de tiempo a los registros. ¿Cuál es la mejor manera de lograr esto?
A veces, el formato predeterminado de marca de tiempo puede no ser conveniente para usted. Puede anularlo con su implementación.
En lugar de
var winston = require(''winston'');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({''timestamp'':true})
]
});
puedes escribir
var winston = require(''winston'');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
''timestamp'': function() {
return <write your custom formatted date here>;
}
})
]
});
Consulte https://github.com/winstonjs/winston#custom-log-format para obtener más información.
Aunque no conozco Winston, esta es una sugerencia. Yo uso log4js para el registro y mis registros por defecto se ven así
[2012-04-23 16:36:02.965] [INFO] Development - Node Application is running on port 8090
[2012-04-23 16:36:02.966] [FATAL] Development - Connection Terminated to ''127.0.0.1'' ''6379''
El desarrollo es el entorno de mi proceso de nodo y [INFO | FATAL] es el nivel de registro
El mantenimiento de diferentes perfiles para el registro es posible en log4js. Tengo perfiles de Desarrollo y Producción. También hay tipos de registradores como el apilador de archivos rodantes, el appender de la consola, etc. Como complemento, los archivos de registro serán coloridos en función del nivel de registro [Trace, Info, Debug, Error, Fatal];)
log4js anulará tu console.log Es un parámetro configurable ahora en 0.5+
Estaba lidiando con el mismo problema yo mismo. Hay dos formas en que pude hacer esto.
Cuando se incluye a Winston, por lo general se agrega de manera predeterminada un transporte de consola. Para que las marcas de tiempo funcionen en este caso predeterminado, necesitaba:
- Retire el transporte de la consola y vuelva a agregarlo con la opción de marca de tiempo.
- Cree su propio objeto Logger con la opción de marca de tiempo establecida en verdadero.
El primero:
var winston = require(''winston'');
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {''timestamp'':true});
La segunda y más limpia opción:
var winston = require(''winston'');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({''timestamp'':true})
]
});
Algunas de las otras opciones para el transporte de la consola se pueden encontrar here :
- nivel: nivel de mensajes que este transporte debe registrar (predeterminado ''depurar'').
- silent: Indicador booleano que indica si se debe suprimir la salida (valor predeterminado falso).
- colorize: indicador booleano que indica si debemos colorear la salida (valor predeterminado falso).
- timestamp: Indicador booleano que indica si debemos preceder la salida con marcas de tiempo (valor predeterminado falso). Si se especifica la función, se usará su valor de retorno en lugar de marcas de tiempo.
Las respuestas anteriores no funcionaron para mí. En caso de que intente agregar marca de tiempo a sus registros utilizando la última versión de Winston - 3.0.0-rc1, esto funcionó como un hechizo:
const {transports, createLogger, format} = require(''winston'');
const logger = createLogger({
format: format.combine(
format.timestamp(),
format.json()
),
transports: [
new transports.Console(),
new transports.File({filename: ''logs/error/error.log'', level: ''error''}),
new transports.File({filename: ''logs/activity/activity.log'', level:''info''})
]
});
Usé ''format.combine ()''. Como necesitaba marca de tiempo en todos mis transportes, agregué la opción de formateo dentro de createLogger, en lugar de dentro de cada transporte. Mi salida en la consola y en el archivo (activity.log) son los siguientes:
{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}
{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}
Podemos agregar formato a esta marca de tiempo en ''format.combine ()'' como de costumbre usando:
format.timestamp({format:''MM-YY-DD''})
Podemos hacer esto también
var winston = require(''winston'');
const { createLogger, format, transports } = require(''winston'')
var config = require(''../configurations/envconfig.js'');
var loggerLevel = process.env.LOGGERLEVEL || config.get(''LOGGERLEVEL'');
var logger = winston.createLogger({ format: format.combine(
format.timestamp({
format: ''YYYY-MM-DD HH:mm:ss''
}),
format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`+(info.splat!==undefined?`${info.splat}`:" "))
),
transports: [
new (winston.transports.Console)({ level: loggerLevel }),
]
});
module.exports = logger;
Puede usar la utilidad incorporada y forever para lograr el registro con timestap para su servidor nodejs. Cuando inicie un servidor, agregue salida de registro como parte del parámetro:
forever start -ao log/out.log server.js
Y luego puedes escribir util en tu server.js
server.js
var util = require(''util'');
util.log("something with timestamp");
El resultado será similar al archivo out.log:
out.log
15 Mar 15:09:28 - something with timestamp
podríamos usar el sello de la consola para agregar la marca de tiempo y el nivel de registro a la consola existente: require(''console-stamp'')(console, ''[yyyy-mm-dd HH:MM:ss.l]'')
Consulte https://github.com/starak/node-console-stamp para obtener más información.