在 CentOS 下用 nohup 启动程序时,日志一般会重定向到文件(如 nohup.out 或自定义日志文件)。过滤日志本质上就是“对日志文件用文本处理命令”。下面按常见场景给你总结。
tail -f nohup.out | grep "ERROR"
只显示包含 ERROR 的行(实时)。
多个关键字(或关系):
tail -f nohup.out | grep -E "ERROR|WARN"
排除某些关键字:
tail -f nohup.out | grep -v "DEBUG"
grep "ERROR" nohup.out
grep -n "ERROR" nohup.out
grep -i "error" nohup.out
grep -c "ERROR" nohup.out
假设日志格式:
2026-01-21 10:30:00 ERROR xxxx
过滤某天:
grep "2026-01-21" nohup.out | grep "ERROR"
过滤某个时间段:
awk '$1=="2026-01-21" && $2>="10:00:00" && $2<="11:00:00"' nohup.out
nohup python app.py 2>&1 | grep "ERROR" > error.log &
⚠ 注意:
这样会丢失未匹配的行,一般不建议,除非你只关心某类日志。
nohup ./app.sh > app.log 2>&1 &
然后:
tail -f app.log | grep ERROR
less(大文件友好)less app.log
在 less 中:
/ERROR 搜索&ERROR 只显示匹配行只看异常:
tail -f nohup.out | grep -E "ERROR|Exception"
看某接口请求:
tail -f nohup.out | grep "/api/login"
看非心跳日志:
tail -f nohup.out | grep -v "heartbeat"
如果你愿意,可以:
我可以帮你写精准的过滤命令。