我已经使用winston 设置了日志记录,并希望使用winston 的dailyRotateFile 写入日志文件。记录到控制台没有问题,但将完全相同的内容记录到文件确实有点工作,但它确实以某种方式包含所有转义字符。
const winstonLogFormat = winston.format.combine(
winston.format.colorize({ all: true }),
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss.SSS',
}),
winston.format.align(),
winston.format.printf((info) => `[${info.timestamp}] ${info.level}: ${info.message}`)
)
const fileRotateTransport = new winston.transports.DailyRotateFile({
filename: '%DATE%-app-log.log',
dirname: 'logs',
datePattern: 'YYYY-MM-DD',
maxFiles: '28d',
zippedArchive: true,
json: false,
});
const logger = winston.createLogger({
level: logLevel,
format: winstonLogFormat,
transports: [
fileRotateTransport,
new winston.transports.Console()
]
});
我使用
logger.info('Connected to: ' + target);
进行记录并将其记录在日志文件中:
[2024-01-11 10:50:46.160] [32minfo[39m: [32mConnected to: Home[39m
(在每个
[
Notepad++ 以黑色显示 ESC 之前)
控制台只会向我显示正确的日志,没有任何奇怪的字符:
[2024-01-11 10:50:46.160] info: Connected to: Home
知道如何解决这个问题吗?
编辑: 发现这和颜色有关系。从日志格式中删除
winston.format.colorize({ all: true })
时,控制台不会有任何颜色,但日志不会有错误。
知道如何删除日志文件中的颜色吗?我尝试向 DailyRotateFile 添加新的日志格式,但没有成功:
const winstonLogFormat = winston.format.combine(
winston.format.colorize({ all: true }),
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss.SSS',
}),
winston.format.align(),
winston.format.printf((info) => `[${info.timestamp}] ${info.level}: ${info.message}`)
)
const winstonLogFormatForFile = winston.format.combine(
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss.SSS',
}),
winston.format.align(),
winston.format.printf((info) => `[${info.timestamp}] ${info.level}: ${info.message}`)
)
const fileRotateTransport = new winston.transports.DailyRotateFile({
filename: '%DATE%-app-log.log',
dirname: 'logs',
datePattern: 'YYYY-MM-DD',
maxFiles: '28d',
zippedArchive: true,
json: false,
format: winstonLogFormatForFile
});
const logger = winston.createLogger({
level: logLevel,
format: winstonLogFormat,
transports: [
fileRotateTransport,
new winston.transports.Console()
]
});
事实证明,您可以为
winston.transports.Console()
提供自己的格式,这样您就不需要提供全局格式,因此记录到文件中不会有任何颜色:
const winstonLogFormatForFile = winston.format.combine(
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss.SSS',
}),
winston.format.align(),
winston.format.printf((info) => `[${info.timestamp}] ${info.level}: ${info.message}`)
)
const fileRotateTransport = new winston.transports.DailyRotateFile({
filename: '%DATE%-app-log.log',
dirname: 'logs',
datePattern: 'YYYY-MM-DD',
maxFiles: '28d',
zippedArchive: true,
json: false,
format: winstonLogFormatForFile
});
const consoleTransport = new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize({ all: true }),
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss.SSS',
}),
winston.format.align(),
winston.format.printf((info) => `[${info.timestamp}] ${info.level}: ${info.message}`)
)
});
const logger = winston.createLogger({
level: logLevel,
transports: [
fileRotateTransport,
consoleTransport
]
});