要用 journalctl 检索 nginx 服务从昨天到今天的日志,需使用 -u nginx.service 配合 --since "yesterday" 和 --until "now",可加 -o short-iso、-n 100、-p err..alert 或 grep 筛选,并支持导出为文本或 json 格式。

要用 journalctl 定向检索并分析某个特定服务(比如 nginx)从昨天到今天的所有日志,核心是组合时间范围、服务单元名和日志过滤选项。
指定服务单元并限制时间范围
最直接的方式是用 -u 指定服务名,并用 --since 和 --until 精确划定时间段。例如:
journalctl -u nginx.service --since "yesterday" --until "now"- 也可以写成相对时间:
--since "24 hours ago",效果等价 - 注意:systemd 默认使用本地时区解析时间字符串,确保系统时区设置正确
增强可读性与分析效率
原始日志可能信息密集,加上格式化和筛选能更快定位问题:
- 加
-o short-iso用 ISO 时间戳,便于排序和比对 - 加
-n 100只看最近 100 行(避免刷屏),或省略该参数查看全部 - 加
-p err..alert仅显示错误及以上级别日志,快速发现异常 - 配合
grep进一步筛选关键词,如| grep -i "fail\|timeout"
导出日志供离线分析
若需保存或用其他工具处理,可导出为文本或 JSON:
- 导出为普通文本:
journalctl -u nginx.service --since yesterday > nginx_logs.txt - 导出结构化 JSON:
journalctl -u nginx.service --since yesterday -o json > nginx_logs.json - JSON 格式包含时间戳、优先级、进程 ID 等字段,适合脚本解析
验证服务是否存在及日志是否启用
如果查不到日志,可能是服务未运行或日志被轮转/清理:
- 先确认服务名是否准确:
systemctl list-units --type=service | grep nginx - 检查日志是否持久化:
ls /var/log/journal/,若为空,说明日志只保留在内存中(重启后丢失) - 启用持久日志:创建目录
/var/log/journal并重启systemd-journald
不复杂但容易忽略细节,关键是时间表达准确、服务名带 .service 后缀、并根据分析目标选择合适的输出格式和过滤条件。











