Estoy tratando de crear un módulo de registro utilizando winston como marco de registro. Me permite especificar colores, lo cual es bastante bueno si el transporte es Console , pero si tuviera que definir dos transportes, uno Console , un File , en realidad guardará la cadena del formateador de terminal en el texto, que se guardará en el expediente.
const { addColors, createLogger, format, transports } = require('winston'); const { combine, colorize, printf, timestamp } = format; const logFormat = printf((info) => { return `[${info.timestamp}] ${info.level}: ${info.message}`; }); const rawFormat = printf((info) => { return `[${info.timestamp}] ${info.level}: ${info.message}`; }); const config = require('../config'); const logger = createLogger({ level: config.DEBUG, format: combine( colorize(), timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), logFormat, ), transports: [ new transports.File({ filename: 'combined.log', }), new transports.Console({ format: combine(timestamp(), rawFormat) }), ], }); addColors({ debug: 'white', error: 'red', info: 'green', warn: 'yellow', }); module.exports = logger;La consola se verá así:
[2018-06-12 15:54:14] info: Listening on port 9000 Donde la info está coloreada en verde, pero si miro el archivo combine.log , se mostrará como:
[2018-06-12 15:54:14] [32minfo[39m: Listening on port 9000¿Es posible registrar texto sin procesar en un archivo, pero aún mostrar colores en la terminal?
Si no, ¿hay otra biblioteca que permita esto? Di bunyan ?
No sé si necesitas esto más, pero tarde es mejor que nunca.
Básicamente, solo necesita eliminar colorzie() del formato general que ha definido y luego usarlo en los transportes específicos que desea mostrar en color.
var options = { console: { handleExceptions: true, level: 'debug', format: combine(colorize(), myFormat) }, verbose: { filename: './logs/debug/mobile_api-%DATE%.log', level: 'debug', format: combine(myFormat) }, } const logger = winston.createLogger({ levels: myCustomLevels.levels, transports: [ new transports.Console(options.console), new transports.file(options.verbose), ] });Con esto, cuando el registro se imprima en la consola, puede ver el color y cuando escriba en el archivo, no mostrará ningún código de color.
Puede usar el método sin winston.format uncolorized Lea sobre esto en la documentación de logform .