Winston
和 Log4js
都是流行的 JavaScript 日志库,用于在 Node.js 应用程序中记录日志信息。它们各自有不同的特点和优势,适用于不同的场景。
基础概念: Winston 是一个灵活的日志库,支持多种传输方式(transports),如文件、控制台、HTTP 等。它允许开发者自定义日志级别、格式和输出。
优势:
类型:
应用场景:
示例代码:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
logger.info('Hello World');
logger.error('An error occurred');
基础概念: Log4js 是一个功能强大的日志库,支持多种日志级别、布局和附加器(appenders)。它允许开发者通过配置文件来管理日志输出。
优势:
类型:
应用场景:
示例代码:
const log4js = require('log4js');
log4js.configure({
appenders: {
file: { type: 'file', filename: 'error.log' },
console: { type: 'console' }
},
categories: {
default: { appenders: ['file', 'console'], level: 'debug' }
}
});
const logger = log4js.getLogger();
logger.debug('This is a debug message');
logger.info('This is an info message');
logger.error('This is an error message');
问题:日志文件过大,如何解决?
原因:日志文件没有进行轮转,导致单个文件过大。
解决方法:
示例代码(Winston):
const { createLogger, transports, format } = require('winston');
const { combine, timestamp, printf } = format;
const myFormat = printf(({ level, message, timestamp }) => {
return `${timestamp} ${level}: ${message}`;
});
const logger = createLogger({
format: combine(
timestamp(),
myFormat
),
transports: [
new transports.File({
filename: 'app.log',
maxsize: 10 * 1024 * 1024, // 10MB
maxFiles: 5,
tailable: true
})
]
});
示例代码(Log4js):
log4js.configure({
appenders: {
file: { type: 'dateFile', filename: 'app.log', pattern: '.yyyy-MM-dd', keepFileExt: true, compress: true }
},
categories: {
default: { appenders: ['file'], level: 'debug' }
}
});
通过以上配置,日志文件会在达到指定大小后自动轮转,并保留一定数量的旧日志文件。
领取专属 10元无门槛券
手把手带您无忧上云