在Node.js应用中,随着应用规模扩大,日志量会急剧增加。以下是几种高效筛选关键日志信息的方法:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info', // 只记录info及以上级别
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'error.log', level: 'error' }) // 单独存储错误日志
]
});
# 查找错误日志
grep -i "error" app.log
# 查找特定请求ID的日志
grep "reqId:12345" app.log
# 查找过去5分钟内的日志
grep "$(date -d '5 minutes ago' '+%Y-%m-%d %H:%M')" app.log
Pino + pino-pretty: 结构化JSON日志与美化输出
node app.js | pino-pretty -t
ELK Stack (Elasticsearch, Logstash, Kibana): 强大的日志分析平台
Splunk: 企业级日志管理
// 使用JSON格式输出日志
logger.info({
message: 'User logged in',
userId: 123,
ip: '192.168.1.1',
timestamp: new Date().toISOString()
});
# 使用grep高亮关键词
grep --color=auto -E "error|warn|critical" app.log
// 简单的Node.js日志筛选脚本
const fs = require('fs');
const readline = require('readline');
const rl = readline.createInterface({
input: fs.createReadStream('app.log'),
output: process.stdout,
terminal: false
});
rl.on('line', (line) => {
if (line.includes('ERROR') || line.includes('WARN')) {
console.log(line);
}
});
通过以上方法,您可以有效地从海量日志中快速定位关键信息,提高问题排查效率。