平时用软件或者写程序,总免不了看日志。尤其是系统出问题的时候,翻日志就像查监控录像,得一帧一帧找线索。而最实用的筛选方式之一,就是按时间查日志。
为什么非得按时间查?
想象一下,服务器突然在晚上8点卡了一下,用户投诉页面打不开。这时候你去翻日志,总不能从头到尾一页页看吧?如果能直接查“8点前后的记录”,几秒就能锁定异常信息。比如看到一条 ERROR: database timeout 正好发生在19:59:42,问题范围立马缩小。
常见工具怎么查?
大多数日志系统都支持时间范围过滤。以Linux下常用的 journalctl 为例,想查今天下午2点到4点的服务日志,命令是:
journalctl --since "14:00" --until "16:00"
如果你用的是Nginx,访问日志默认按行记录,每条都有时间戳。可以用 grep 配合时间关键词快速提取:
grep "03/Apr/2025:14" /var/log/nginx/access.log
这行命令会找出2025年4月3日下午2点的所有访问记录,适合临时排查。
应用层日志也一样处理
自己写的Python脚本打的日志,只要加了时间格式,也能方便检索。比如日志长这样:
2025-04-03 14:23:15, INFO: User login success - uid=1023
2025-04-03 14:23:16, WARNING: Slow query detected
想查14:20到14:30之间的所有记录,直接用 awk 筛时间:
awk '$2 >= "14:20:00" && $2 <= "14:30:00"' app.log
这里$2是第二列,也就是时间部分,简单粗暴但很管用。
别忘了时区问题
有一次同事在国外部署服务,本地日志显示“10:00报错”,但他按北京时间去查,怎么都对不上。后来才发现,服务器用的是UTC时间,比国内慢8小时。所以查日志前先确认系统时区,避免白忙一场。
小技巧提升效率
如果经常要查某个时间段,可以写个简单的shell脚本封装常用命令。比如做个 log-today 脚本,自动算出今天的起止时间,一键输出关键服务的日志片段。再配合 less 或 vim 搜索功能,定位速度能快好几倍。
日志量一大,靠肉眼翻就不现实了。学会按时间切片,相当于给混乱的信息流装了个开关,想看哪段就哪段,省时又省心。