1. 调整日志级别
通过降低日志库的记录级别,过滤掉冗余的调试或信息日志。常见日志库的配置示例如下:
level参数为warn或error,仅记录警告及以上级别的日志。const winston = require('winston');
const logger = winston.createLogger({
level: 'warn', // 仅记录warn/error日志
transports: [new winston.transports.Console()]
});
level为error,忽略debug和info日志。const log4js = require('log4js');
log4js.configure({
appenders: { out: { type: 'stdout' } },
categories: { default: { appenders: ['out'], level: 'error' } }
});
LOG_LEVEL环境变量动态设置级别(适用于Express、Koa等框架)。LOG_LEVEL=error node app.js # 生产环境设置为error
2. 使用日志轮转工具(logrotate)
通过logrotate定期压缩、删除旧日志,避免单个日志文件过大。创建自定义配置文件(如/etc/logrotate.d/yourapp),内容如下:
/var/log/yourapp/*.log {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志(如.gz格式)
delaycompress # 延迟压缩前一天的日志(避免当天压缩失败)
missingok # 忽略缺失的日志文件
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件并设置权限
}
执行sudo logrotate -vf /etc/logrotate.d/yourapp手动测试配置。
3. 优化应用代码
if (process.env.NODE_ENV === 'development') {
logger.debug('Debug information: %s', someVariable);
}
user_id、operation),而非完整对象。// 合并前后状态日志
logger.info('User operation: userId=%d, action=%s, beforeSize=%d, afterSize=%d',
userId, action, beforeSize, afterSize);
// 精简日志内容(用缩写代替完整字段名)
logger.debug('Write op: tid=%s, size=%d', traceId, size);
4. 采用异步日志库
使用异步日志库(如pino)减少日志记录对应用性能的影响,同时支持低级别日志过滤。示例:
const pino = require('pino');
const logger = pino({ level: 'warn' }); // 异步记录,仅warn及以上级别
logger.warn('This is a warning message');
pino的高性能特性适合高并发场景,能有效降低日志记录的资源占用。
5. 配置系统日志级别
若应用日志通过系统日志(syslog)输出,可调整rsyslog配置,过滤特定应用的日志。编辑/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf,添加规则:
if $programname == 'yourapp' then /var/log/yourapp.log
& stop # 停止进一步处理,避免重复记录
重启rsyslog服务使配置生效:sudo systemctl restart rsyslog。
6. 使用集中式日志管理工具
通过ELK Stack(Elasticsearch+Logstash+Kibana)、Graylog等工具集中管理日志,实现日志过滤、聚合和长期存储。这些工具能自动清理过期日志,减少本地磁盘占用,同时提供强大的日志分析功能。