Debian环境下JavaScript(JS)日志管理指南
JavaScript日志管理需依赖专业的日志库,以提供灵活的格式化、传输和级别控制功能。常见库包括:
以Winston为例,配置步骤如下:
npm install winston。logger.js,配置日志级别、格式和传输方式:const winston = require('winston');
const logger = winston.createLogger({
level: 'info', // 默认日志级别(可选:error/debug/warn等)
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json() // 结构化日志,便于分析
),
transports: [
new winston.transports.Console(), // 输出到控制台
new winston.transports.File({ filename: '/var/log/myapp.log' }), // 输出到文件
new winston.transports.File({ filename: '/var/log/myapp-error.log', level: 'error' }) // 错误日志单独存储
]
});
module.exports = logger;
console.log:const logger = require('./logger');
logger.info('Application started');
logger.error('Something went wrong');
使用logrotate工具自动管理日志文件,避免单个文件过大占用磁盘空间。步骤如下:
sudo apt-get install logrotate(Debian默认已安装)。/etc/logrotate.d/下创建应用专属配置(如myapp):/var/log/myapp.log {
daily # 每天轮转一次
rotate 7 # 保留最近7个日志文件
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩(避免压缩当天日志)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
create 640 root adm # 新日志文件权限和属主
}
sudo logrotate -f /etc/logrotate.d/myapp(强制执行轮转,检查是否有错误)。若应用通过systemd启动(如pm2或node服务),可通过systemd的日志功能管理:
journalctl -u myapp.service(myapp.service为服务名称)。journalctl -u myapp.service -f。journalctl -u myapp.service --since "2025-09-01" --until "2025-09-30"(按时间范围过滤)。对于分布式系统或多应用场景,可使用集中式日志管理工具,将日志收集到统一平台进行分析:
node.conf配置文件:input {
file {
path => "/var/log/myapp.log"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "myapp-logs"
}
}
sudo systemctl start logstash,日志将自动发送到Elasticsearch。日志级别控制日志的详细程度,减少不必要的日志输出,提升性能:
LOG_LEVEL,如LOG_LEVEL=debug node app.js(优先级最高)。level: 'debug'。logger.level = 'debug'(适合动态调整)。tail -f /var/log/myapp.log(跟踪日志最新内容)。grep "error" /var/log/myapp.log(查找包含“error”的日志行)。less /var/log/myapp.log(按上下键滚动,按q退出)。