Linux环境下Node.js日志管理最佳实践
根据应用需求选择高性能、易扩展的日志库:
根据环境调整日志级别,平衡信息详细度与存储成本:
error(错误)、warn(警告)级别日志,关闭debug(调试)、verbose(详细)等低级别日志,减少不必要的磁盘写入;debug或trace(跟踪)级别,便于排查问题;level: 'info'(仅记录info及以上级别),Log4js中通过categories.default.level配置。防止日志文件无限增长,占用过多磁盘空间:
winston-daily-rotate-file,支持按天/按大小轮换,配置maxSize(单文件最大尺寸,如20m)、maxFiles(保留天数/数量,如14d)、zippedArchive(压缩归档旧日志);logrotate,通过crontab定时执行,支持自定义轮换规则(如/etc/logrotate.d/nodejs配置文件)。const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'logs/application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
提升日志管理效率,支持集中式存储与分析:
pm2 logs实时查看),支持日志轮换(pm2 set pm2:log_rotate true);/etc/logrotate.conf全局配置或自定义配置文件(如/etc/logrotate.d/nodejs),实现定时轮换、压缩、删除旧日志。确保日志文件有序存储,便于检索与管理:
/var/log),建议创建专用目录(如/var/log/nodejs/或应用目录下的logs/子目录);application-YYYY-MM-DD.log),包含应用名称与日期,便于快速定位;prod/dev)、模块(auth/order)划分日志目录,提升可维护性。保护敏感信息,防止日志泄露:
chmod/chown设置日志文件权限(如640,所有者可读写,组用户可读),限制访问人员;format或中间件(如express-winston)过滤密码、Token等敏感字段(如message.replace(/password=[^&]*/g, 'password=******'));gpg),防止未授权访问。及时发现潜在问题,提升运维效率:
error日志);tail -f结合grep实时监控错误日志(如tail -f app.log | grep "error"),快速响应问题。快速检索与分析日志内容:
tail -f app.log(实时显示日志末尾内容);cat app.log(适合小文件);grep "error" app.log(查找包含“error”的行)、grep -i "warning" app.log(忽略大小写);grep "error" app.log | wc -l(统计错误日志行数)。