Linux 服务器查看微服务日志(以 system 服务为例)


一、找到日志文件位置

# 方法1:全局搜索日志文件
find / -name "*system*" -name "*.log" 2>/dev/null

# 方法2:在常见部署目录查找
find /opt /home /data /usr/local -name "*system*" -name "*.log" 2>/dev/null

# 方法3:查看进程启动参数,找到工作目录
ps -ef | grep system
# 输出示例:java -jar /opt/app/system-service.jar --logging.file.path=/opt/logs/system

逐段拆解

片段含义
findLinux 文件搜索命令
/搜索的起始路径,即根目录(全盘搜索)
-name "*system*"第一个条件:文件名包含 “system”(* 是通配符,匹配任意字符)
-name "*.log"第二个条件:文件名以 “.log” 结尾
2>/dev/null将标准错误输出重定向到"黑洞",屏蔽报错信息

关键点详解

1. 两个 -name 是 AND(与) 关系
-name "*system*" -name "*.log"

等价于:

-name "*system*" -a -name "*.log"

即文件名必须同时满足两个条件:

  • ✅ system-service.log → 匹配
  • ✅ system.log → 匹配
  • ❌ system-service.txt → 不匹配(不是 .log)
  • ❌ app.log → 不匹配(不含 system)
2. 通配符 *
*system*  →  任意字符 + system + 任意字符
*.log     →  任意字符 + .log
3. 为什么需要加2>/dev/null

解析:

部分含义
2文件描述符 2,即 stderr(标准错误)
>重定向
/dev/null空设备(“黑洞”),写入的内容全部丢弃

全盘搜索时,很多目录没有权限访问,会产生大量报错:

find: '/proc/12345/fd': Permission denied
find: '/root/.ssh': Permission denied
...

加了 2>/dev/null 后这些报错全部被屏蔽,终端只显示搜索结果,更清爽。

常见日志路径:

/opt/logs/system/system.log
/home/app/logs/system-service.log
/data/logs/system/system-info.log

补充说明

变体说明
find /opt -name "*.log"只搜 /opt 目录,范围更小更快
find / -iname "*system*"-iname 忽略大小写
find / -name "*.log" -mtime -1只找最近1天修改过的 .log
find / -name "*.log" -size +100M只找大于100MB的日志

二、实时查看日志(最常用)

# 实时滚动查看最新日志
tail -f /opt/logs/system/system.log

# 查看最后 200 行并持续跟踪
tail -200f /opt/logs/system/system.log

# 同时监控多个日志文件
tail -f /opt/logs/system/system-info.log /opt/logs/system/system-error.log

三、搜索/过滤日志

# 搜索关键字(如异常、某个接口)
grep "ERROR" system.log
grep "NullPointerException" system.log
grep "/api/user/login" system.log

# 忽略大小写 + 显示行号
grep -in "error" system.log

# 查看关键字前后5行上下文
grep -C 5 "Exception" system.log

# 实时过滤(只看ERROR级别)
tail -f system.log | grep "ERROR"

# 按时间范围过滤(查看某段时间的日志)
grep "2026-07-30 16:" system.log
sed -n '/2026-07-30 16:00/,/2026-07-30 16:30/p' system.log

四、分页查看大日志文件

# 分页查看(支持搜索:按 / 输入关键字,n 下一个)
less system.log

# 直接跳到文件末尾(看最新日志)
less +G system.log

# 查看文件头部/尾部
head -100 system.log
tail -100 system.log

五、Docker 部署的情况

# 查看容器列表,找到 system 服务
docker ps | grep system

# 查看日志(实时)
docker logs -f system-service

# 查看最近 500 行
docker logs --tail 500 system-service

# 按时间过滤
docker logs --since "2026-07-30T16:00:00" system-service

# 进入容器内部查看日志文件
docker exec -it system-service bash
cd /app/logs && tail -f system.log

六、Systemd 管理的服务

# 查看服务日志
journalctl -u system-service

# 实时跟踪
journalctl -u system-service -f

# 查看最近1小时
journalctl -u system-service --since "1 hour ago"

# 只看错误
journalctl -u system-service -p err

七、实用组合技巧

# 统计今天ERROR数量
grep -c "ERROR" system.log

# 查看最近的异常堆栈(最近一次Exception及后续30行)
grep -n "Exception" system.log | tail -1
# 假设得到行号 12345
sed -n '12345,12375p' system.log

# 监控日志中是否出现新错误(脚本化)
tail -f system.log | grep --line-buffered "ERROR" | while read line; do
    echo "[$(date)] $line"
done

# 日志文件太大时,查看磁盘占用
du -sh /opt/logs/system/
ls -lhS /opt/logs/system/    # 按大小排序

八、Spring Boot 微服务常见日志配置参考

# application.yml 中的日志配置
logging:
  file:
    path: /opt/logs/system
    name: /opt/logs/system/system.log
  level:
    root: INFO
    com.xxx.system: DEBUG
  logback:
    rollingpolicy:
      max-file-size: 100MB
      max-history: 30

💡 小提示:如果不确定日志在哪,最快的方式是 ps -ef | grep system 看启动命令,或者 find / -name "*.log" -mmin -60 2>/dev/null 找最近1小时内有写入的日志文件。

更多推荐