Esto sigue siendo demasiado amplio porque NO puede hacerlo desde la máquina cliente.
Joshua
Respuestas:
112
Yo mismo estaba lidiando con el mismo problema. Hay dos formas en que pude hacer esto.
Cuando incluye Winston, por lo general, el valor predeterminado es agregar un transporte de consola. Para que las marcas de tiempo funcionen en este caso predeterminado, necesitaba:
Quite el transporte de la consola y vuelva a agregar 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 opción más limpia:
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 aquí :
level: Nivel de mensajes que este transporte debe registrar ("depuración" por defecto).
silencioso: bandera booleana que indica si se debe suprimir la salida (por defecto es falso).
colorear: bandera booleana que indica si debemos colorear la salida (por defecto es falso).
timestamp: bandera booleana que indica si debemos anteponer la salida con marcas de tiempo (por defecto es falso). Si se especifica la función, se utilizará su valor de retorno en lugar de las marcas de tiempo.
Esto es genial. Por lo general, envuelvo esto en un archivo dedicado para poder obtener fácilmente mi registrador configurado desde cualquier archivo, es decir, coloco el código anterior (opción 2) en un nuevo archivo logger.js, seguido de module.exports = logger; luego, desde cualquier archivo, hago var logger = require ('./ logger.js') y luego puedo hacer logger.info ('hola') desde cualquier archivo y obtener la misma configuración de Winston.
JHH
TypeError: (valor intermedio) no es una función
Urasquirrel
81
Las respuestas anteriores no funcionaron para mí. En caso de que esté intentando agregar una marca de tiempo a sus registros utilizando la última versión de Winston - 3.0.0-rc1, esto funcionó a la perfección:
Usé 'format.combine ()'. Como necesitaba la marca de tiempo en todos mis transportes, agregué la opción de formato dentro de createLogger, en lugar de dentro de cada transporte. Mi salida en la consola y en el archivo (activity.log) es la siguiente:
{"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:
¿Esto también funciona logger.info('Message', someObject)? Configuré un formato personalizado usando la combinación y parece que no puedo someObjectincluirlo en el mensaje de registro.
SomethingOn
1
Pude ser someObjectincluido usando la siguiente declaración printf ${info.timestamp} [${info.level.toUpperCase()}]: ${info.message} ${JSON.stringify(info)}. Incluye el nivel, la marca de tiempo y el mensaje que supongo que podría eliminar.
SomethingOn
9
Usted puede usar una función de util y siempre para lograr el registro con timestap para su servidor nodejs. Cuando inicie un servidor, agregue la 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");
La salida tendrá un aspecto similar al archivo out.log:
Desafortunadamente, util.error()omite la marca de tiempo en la salida.
Saran
4
Aunque no conozco a Winston, esta es una sugerencia. Utilizo log4js para registrar y mis registros por defecto se ven así
[2012-04-2316:36:02.965][INFO]Development-NodeApplication is running on port 8090[2012-04-2316:36:02.966][FATAL]Development-ConnectionTerminated to '127.0.0.1''6379'
El desarrollo es el entorno de mi proceso de nodo y [INFO | FATAL] es el nivel de registro
Es posible mantener diferentes perfiles para el registro en log4js. Tengo perfiles de Desarrollo y Producción. También hay tipos de registradores como agregador de archivos rodantes, agregador de consola, etc. Como complemento, sus archivos de registro serán coloridos según el nivel de registro [Trace, Info, Debug, Error, Fatal];)
log4js anulará su console.log Es un parámetro configurable ahora en 0.5+
Para su información: las versiones más recientes de log4js-node (0.5+) no anulan automáticamente console.log.
Jeff Hiltz
@jeffhiltz Ya tienes razón :) Ahora es un parámetro configurable
Tamil
2
A veces, el formato de marca de tiempo predeterminado puede no ser conveniente para usted. Puede anularlo con su implementación.
En vez 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>;}})]});
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]')
Otra solución es empaquetar el registrador en un archivo que exporta algunas funciones como logger.info (), logger.error (), etc., luego simplemente pasa una clave adicional para enviarla en cada registro de mensajes.
Tomé la respuesta de Biswadev y creé un objeto JSON en cadena. De esta manera, si necesito procesar los registros más tarde, estará en un formato bien estructurado.
Respuestas:
Yo mismo estaba lidiando con el mismo problema. Hay dos formas en que pude hacer esto.
Cuando incluye Winston, por lo general, el valor predeterminado es agregar un transporte de consola. Para que las marcas de tiempo funcionen en este caso predeterminado, necesitaba:
El primero:
La segunda opción más limpia:
Algunas de las otras opciones para el transporte de la consola se pueden encontrar aquí :
fuente
Las respuestas anteriores no funcionaron para mí. En caso de que esté intentando agregar una marca de tiempo a sus registros utilizando la última versión de Winston - 3.0.0-rc1, esto funcionó a la perfección:
Usé 'format.combine ()'. Como necesitaba la marca de tiempo en todos mis transportes, agregué la opción de formato dentro de createLogger, en lugar de dentro de cada transporte. Mi salida en la consola y en el archivo (activity.log) es la siguiente:
Podemos agregar formato a esta marca de tiempo en 'format.combine ()' como de costumbre usando:
fuente
También podemos hacer esto
fuente
logger.info('Message', someObject)
? Configuré un formato personalizado usando la combinación y parece que no puedosomeObject
incluirlo en el mensaje de registro.someObject
incluido usando la siguiente declaración printf${info.timestamp} [${info.level.toUpperCase()}]: ${info.message} ${JSON.stringify(info)}
. Incluye el nivel, la marca de tiempo y el mensaje que supongo que podría eliminar.Usted puede usar una función de util y siempre para lograr el registro con timestap para su servidor nodejs. Cuando inicie un servidor, agregue la salida de registro como parte del parámetro:
Y luego puedes escribir util en tu server.js
server.js
La salida tendrá un aspecto similar al archivo out.log:
out.log
fuente
util.error()
omite la marca de tiempo en la salida.Aunque no conozco a Winston, esta es una sugerencia. Utilizo log4js para registrar y mis registros por defecto se ven así
El desarrollo es el entorno de mi proceso de nodo y [INFO | FATAL] es el nivel de registro
Es posible mantener diferentes perfiles para el registro en log4js. Tengo perfiles de Desarrollo y Producción. También hay tipos de registradores como agregador de archivos rodantes, agregador de consola, etc. Como complemento, sus archivos de registro serán coloridos según el nivel de registro [Trace, Info, Debug, Error, Fatal];)
log4js anulará su console.logEs un parámetro configurable ahora en 0.5+fuente
A veces, el formato de marca de tiempo predeterminado puede no ser conveniente para usted. Puede anularlo con su implementación.
En vez de
puedes escribir
Consulte https://github.com/winstonjs/winston#custom-log-format para obtener más detalles
fuente
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 detalles
fuente
Otra solución es empaquetar el registrador en un archivo que exporta algunas funciones como logger.info (), logger.error (), etc., luego simplemente pasa una clave adicional para enviarla en cada registro de mensajes.
loggerService.js
cualquier archivo.js
your-log.log
fuente
Tomé la respuesta de Biswadev y creé un objeto JSON en cadena. De esta manera, si necesito procesar los registros más tarde, estará en un formato bien estructurado.
Uso:
Salida:
archivo info.log:
Consola:
fuente