要在 Debian 上把 JavaScript 日志记录策略调教得服服帖帖,其实不难,下面这几招足够用。
1. 选对日志库,事半功倍
目前 Node.js 生态里常见的日志库有 `winston`、`pino`、`bunyan` 等,各有所长。选哪个?得看你的具体场景:如果追求性能,`pino` 的吞吐量很亮眼;如果需要丰富的插件和传输机制,`winston` 依然是老牌主力。别纠结太久,先挑一个用起来,后续不满意再换也不迟。
2. 日志级别设准,别让废日志占空间
日志级别从低到高分别是 `trace`、`debug`、`info`、`warn`、`error`。生产环境中,通常只保留 `error` 和 `warn` 级别就够了,`info` 级别可以酌情开启,但 `debug` 和 `trace` 绝对要关掉——否则日志文件会像吹气球一样膨胀,反过来拖慢应用。
3. 日志轮转,用 logrotate 管好“过夜粮”
日志文件不轮转,早晚会撑爆磁盘。Debian 自带的 `logrotate` 就是干这个的。你只需要为你的应用写一个配置文件,比如 `/etc/logrotate.d/myapp`,内容类似下面这样:
```
/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root adm
}
```
这段配置的意思是:每天轮转一次,保留最近 7 天的日志,过期压缩,旧文件自动删除,而且日志文件如果为空就不轮转,避免空操作。非常省心。
4. 异步记录,别让日志拖慢请求
很多日志库都支持异步写入(比如 `pino` 本身就是异步的,`winston` 也可以通过 `stream` 实现异步)。原理就是把日志写入操作丢到后台队列里,主线程不用等。这在高并发场景下特别重要——别让一次 `console.log` 把响应时间拉长几十毫秒。
5. 日志聚合,把分散的日志收拢来看
如果你只在单机上看看日志还行,一旦有十几台甚至上百台节点,用 `tail -f` 挨个查日志简直要命。这时候就需要日志聚合工具,比如 ELK Stack(Elasticsearch + Logstash + Kibana)、Graylog、Fluentd 等。它们能把所有机器的日志统一收集、索引、搜索,还能做可视化仪表盘和告警。部署起来需要一些功夫,但长期看绝对值。
6. 别忘了安全与隐私
日志里经常夹带用户 IP、请求参数、甚至敏感信息。如果日志文件权限没设好,不小心被人 cat 一下,那就出大事了。可以把日志文件权限设为 `640`(属主可读写,所属组可读),并确保只有必要的用户能访问。如果需要长期存储敏感日志,可以考虑加密存储。
7. 监控与告警,让系统自己“喊救命”
光写日志不监控,等于白写。推荐用 Prometheus + Grafana 做指标采集和图表,配合 Alertmanager 设置告警规则。比如日志中 `error` 级别条目在 5 分钟内超过 10 条,就发邮件或钉钉通知。这样就不用人工盯着日志文件看了。
8. 定期回头看,策略不是写死就完事的
应用的流量、功能、问题模式都会变,日志策略也得跟着调整。建议每季度或每次大版本更新后,审视一下当前日志的级别是否恰当、轮转周期是否够用、聚合系统是否健康。好的日志策略是动态演进的,不是一次性配置。
通过上面这些步骤,你完全可以在 Debian 上把 JavaScript 日志记录搞得井井有条,既不影响应用性能,又能随时掌握系统健康状况。