# Linux 使用 Journalctl 查看和操作日志

提示

创建 systemd 服务可以查看这篇文章

# 保存日志到文件

提示

journald 服务存储的日志默认重启系统后删除

编辑配置文件

vi /etc/systemd/journald.conf

Storage=auto 改为 Storage=persistent 并取消注释,然后重启日志服务

systemctl restart systemd-journald

此时 journald 所有的日志都会保存到 /var/log/journal

# 查看和操作

# 清理日志

有两种选项

  • –vacuum-size
  • –vacuum-time

–vacuum-size 指定日志的总体体积,这样会不断的删除旧的日志以保持该条件

journalctl --vacuum-size=1G

–vacuum-time 任何早于这一时间点的条目都将被删除。例如仅保留两天的日志:

journalctl --vacuum-time=2d

# 查看日志

  • 按 Unit 查看日志
journalctl -u nginx.service

提示

服务后面的 .service 可以省略

使用 -f 参数可以动态显示

journalctl -f -u nginx
  • 按行查看

例如查看 nginx 最新的 100 条日志

journalctl -u nginx -n 100

# 输出日志

使用 journalctl 把日志重定向到文件

默认情况下,journalctl 会在 pager 内显示输出结果。如果希望对数据进行处理,则需要使用标准输出。在这种情况下需要使用 --no-pager 选项

sudo journalctl -u nginx --no-pager > nginx.log
  • 格式化输出

添加 -o 参数能够以多种格式进行显示

例如查看 nginx 服务最新 100 行的日志输出 json 格式并重定向到 nginxlog.json

journalctl -u nginx -n 100 --no-pager -o json > nginxlog.json

-o 参数选项支持的类型如下:

  • short 默认格式,即经典的 syslog 输出格式
  • short-iso 强调 ISO 8601 时间戳
  • short-precise 提供微秒级精度
  • short-monotonic 强调普通时间戳
  • verbose 显示全部字段,包括通常被内部隐藏的字段
  • export 适合传输或备份的二进制格式
  • json 标准 json 格式,每行一条记录
  • json-pretty 适合阅读的 json 格式
  • json-sse 经过包装可以兼容 server-sent 事件的 json 格式。
  • cat 只显示信息字段本身。

文章部分内容参考链接: