在Debian系统中,监控JavaScript日志变化需根据JS应用的运行环境(如Node.js、Web服务器)选择合适工具。以下是常用且高效的方法,覆盖从基础命令行到专业监控方案的场景:
tail -f:实时跟踪日志文件末尾
若JS应用将日志输出到特定文件(如/var/log/my-js-app.log),可使用tail -f命令实时查看新增内容:
sudo tail -f /var/log/my-js-app.log
加入-F参数可监控日志轮转(如日志文件被重命名后创建新文件):
sudo tail -F /var/log/my-js-app.log
journalctl:查看systemd管理的JS应用日志
若JS应用通过systemd以服务形式运行(如使用pm2或自定义服务单元),可通过journalctl查看其日志:
# 查看所有系统日志(包含JS应用)
sudo journalctl
# 查看特定服务的日志(需替换为你的服务名,如"my-js-app")
sudo journalctl -u my-js-app -f
# 查看过去1小时的日志
sudo journalctl --since "1 hour ago"
注:需确保JS应用的服务单元文件中设置了
StandardOutput=syslog和StandardError=syslog(参考systemd服务配置)。
grep:过滤关键日志信息
若需查找特定错误或关键字(如"ERROR"、“WARN”),可结合grep命令:
# 查找包含"ERROR"的日志条目
sudo grep "ERROR" /var/log/my-js-app.log
# 统计错误数量
sudo grep "ERROR" /var/log/my-js-app.log | wc -l
若JS应用基于Node.js运行,可使用以下工具提升日志管理能力:
pm2:进程管理与日志监控
pm2是Node.js常用的进程管理工具,支持日志实时查看、轮转和远程访问:
# 启动JS应用并命名(如"my-app")
pm2 start app.js --name my-app
# 实时查看应用日志
pm2 logs my-app
# 查看实时日志(带时间戳)
pm2 logs my-app --lines 100
# 设置日志轮转(自动分割日志文件)
pm2 install pm2-logrotate
注:
pm2-logrotate可自动压缩旧日志并限制文件大小,避免磁盘空间耗尽。
日志库:结构化日志输出
使用winston或bunyan等日志库,可实现日志分级(info/warn/error)、多传输(文件/控制台/数据库)和结构化输出(JSON),便于后续分析:
// 使用winston示例
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
new winston.transports.Console() // 输出到控制台
]
});
// 记录日志
logger.info('Application started');
logger.error('Something went wrong!', { error: new Error('Test error') });
对于生产环境或大规模应用,建议使用专业工具实现集中化日志收集、分析和告警:
ELK Stack(Elasticsearch + Logstash + Kibana)
sudo apt install elasticsearch
sudo systemctl enable --now elasticsearch
sudo apt install logstash
创建配置文件/etc/logstash/conf.d/js-logs.conf,定义日志输入(如Node.js文件路径)、过滤器和输出(Elasticsearch):input {
file {
path => "/var/log/my-js-app.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
# 可选:添加过滤器解析JSON日志
json {
source => "message"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "js-logs-%{+YYYY.MM.dd}"
}
}
重启Logstash:sudo systemctl restart logstash
sudo apt install kibana
sudo systemctl enable --now kibana
访问http://<Debian-IP>:5601,进入“Management”→“Index Patterns”创建js-logs-*索引,然后在“Discover”中查看日志。Grafana Loki + Promtail
Loki是轻量级日志聚合系统,与Promtail(日志收集器)和Grafana(可视化)配合使用,适合中小规模环境:
使用logrotate工具定期压缩、删除旧日志,避免占用过多磁盘空间:
/etc/logrotate.d/my-js-app:/var/log/my-js-app.log {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志
delaycompress # 延迟压缩(避免压缩当天日志)
missingok # 若日志不存在也不报错
notifempty # 若日志为空则不轮转
create 0640 root adm # 创建新日志文件的权限
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
systemctl restart my-js-app >/dev/null 2>&1 || true
endscript
}
sudo logrotate -d /etc/logrotate.d/my-js-app # 干运行(不实际执行)
sudo logrotate -f /etc/logrotate.d/my-js-app # 强制立即轮转
通过以上方法,可根据JS应用的运行环境和需求,选择合适的工具监控Debian系统中的JS日志变化,实现从实时查看、过滤分析到集中化管理的完整流程。