Plainnotes

日志到底该写在哪:文件、journal 还是 stdout

2025-11-12 · 3 分钟系统

同一个服务,日志可能出现在三个地方:/var/log/app.log、journalctl -u app、以及容器的 stdout。写两遍不仅浪费磁盘,排查时还容易看错文件。

原则:

  • 容器里只写 stdout/stderr,交给运行时收集;不要在容器内再装 logrotate。
  • systemd 管理的服务,直接写 stderr 即可,journald 会带上单元名、PID、优先级,journalctl -u app -p err 很好用。
  • 需要结构化日志(JSON)时,写文件更灵活,但要自己管轮转。

混着来最麻烦:既写文件又打 stderr,两边的轮转策略还不一样,出事时两边的时间戳对不上。