结构化日志输出
const winston = require('winston');
const logger = winston.createLogger({
format: winston.format.json(),
transports: [new winston.transports.Console()]
});
日志级别分类
使用日志收集工具
ELK Stack方案
filebeat.inputs:
- type: log
paths:
- /var/log/node-app/*.log
output.elasticsearch:
hosts: ["elasticsearch:9200"]
使用logrotate
/var/log/node-app/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 644 root root
postrotate
systemctl restart node-app
endscript
}
应用内日志轮转
new winston.transports.DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
})
实时监控工具
异常检测
常用分析命令
# 统计错误数量
grep -c '"level":"error"' /var/log/node-app/current.log
# 按时间统计
awk '/2023-01-01/ {print $0}' app.log | grep "error" | wc -l
# 使用jq处理JSON日志
cat app.log | jq 'select(.level == "error") | .message'
异步日志记录
合理控制日志量
使用syslog协议
const winston = require('winston');
require('winston-syslog').Syslog;
logger.add(new winston.transports.Syslog());
日志权限设置
敏感信息过滤
日志加密
通过以上策略和工具的组合使用,可以在Linux环境中高效地管理JS应用程序的日志,实现日志的收集、存储、分析和监控全流程管理。