nodejs - ¿Cómo configurar el nivel de registro en Winston/Node.js?
winston js (5)
Hay 6 niveles predeterminados en winston: tonto = 0 (mínimo), depuración = 1, detallado = 2, info = 3, advertir = 4, error = 5 (máximo)
Al crear los transportes de registrador, puede especificar el nivel de registro como:
new (winston.transports.File)({ filename: ''somefile.log'', level: ''warn'' })
El código anterior establecerá el nivel de registro para warn
, lo que significa que silly
, verbose
y la info
no se emitirá a somefile.log, mientras que warn
, debug
y error
hará.
También puedes definir tus propios niveles:
var myCustomLevels = {
levels: {
foo: 0,
bar: 1,
baz: 2,
foobar: 3
}
};
var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels });
customLevelLogger.foobar(''some foobar level-ed message'');
Tenga en cuenta que es mejor incluir siempre los 6 niveles predefinidos en sus propios niveles personalizados, en caso de que en algún lugar se usen los niveles predefinidos.
Estoy usando Winston Logging con mi aplicación node.js y he definido un transporte de archivos. A lo largo de mi código, me registro utilizando logger.error
, logger.warn
o logger.info
.
Mi pregunta es, ¿cómo especifico el nivel de registro? ¿Existe un archivo de configuración y un valor que pueda establecer para que solo se registren los mensajes de registro apropiados? Por ejemplo, me gustaría que el nivel de registro sea "información" en mi entorno de desarrollo pero "error" en la producción.
Parece que hay una opción de nivel en las opciones aprobadas here
De ese documento:
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ level: ''error'' }),
new (winston.transports.File)({ filename: ''somefile.log'' })
]
});
Ahora, esos ejemplos muestran el nivel de aprobación en el objeto de opción para el transporte de la consola. Cuando utilizas un transporte de archivos, creo que pasarías un objeto de opciones que no solo contiene la ruta de archivo sino también el nivel.
Eso debería conducir a algo así como:
var logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({ filename: ''somefile.log'', level: ''error'' })
]
});
Según ese documento, tenga en cuenta también que a partir de 2.0, expone un método setLevel para cambiar en tiempo de ejecución. Busque en la sección Usar niveles de registro de ese documento.
Puede cambiar el nivel de registro en tiempo de ejecución modificando la propiedad de level
del transporte apropiado:
var log = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ level : ''silly'' })
]
});
...
// Only messages with level ''info'' or higher will be logged after this.
log.transports.Console.level = ''info'';
Supongo que funciona de manera similar para el archivo pero no lo he intentado.
Si desea cambiar el nivel de registro sobre la marcha. Al igual que cuando necesita rastrear el problema de producción por poco tiempo; luego vuelva al nivel de registro de errores. Puede usar un registrador dinámico siempre que pueda exponer un servicio en la web https://github.com/yannvr/Winston-dynamic-loglevel
winston = require(''winston'');
:
:
winston.level = ''debug'';
configurará el nivel de registro a ''depurar''. (Probado con winston 0.7.3)