linux服务日志无统一位置:systemd服务默认用journalctl,传统/sysv服务多存于/var/log/下,web和数据库等应用则依配置自定路径;需结合journalctl、/var/log/目录结构及应用配置文件定位。

Linux服务日志没有唯一固定位置,取决于服务管理方式和配置习惯。systemd 服务默认走 journalctl,传统 SysV 或自定义服务多写入 /var/log/ 下的专用文件,而 Web、数据库等应用常在各自配置中指定路径。
systemd 服务:优先查 journalctl
现代发行版(centos 7+、ubuntu 16.04+、debian 9+)绝大多数服务由 systemd 管理,日志统一由 systemd-journald 收集,不落盘到 /var/log/ 文件中(除非开启持久化)。
- 查看某服务实时日志:journalctl -u nginx -f
- 查看最近 100 行错误日志:journalctl -u sshd –since “2 hours ago” | grep -i “failed”
- 启用日志持久化(重启后仍可查):
sudo mkdir -p /var/log/journal && sudo systemctl restart systemd-journald
/var/log/ 目录:传统与应用日志主阵地
这是最常被访问的日志根目录,不同服务按约定存放:
- /var/log/messages:通用系统事件(RHEL/CentOS)
- /var/log/syslog:通用系统事件(Debian/Ubuntu)
- /var/log/secure:认证与权限相关(SSH 登录、sudo)
- /var/log/maillog 或 /var/log/mail.log:邮件服务
- /var/log/nginx/、/var/log/apache2/、/var/log/mysql/:对应服务子目录
- 若不确定路径,可用:find /var/log -name “*nginx*” -o -name “*mysql*” 2>/dev/NULL
应用自定义日志:查配置文件最可靠
很多服务(如 tomcat、Node.js 应用、自研后台)不走系统日志机制,而是自行写入日志文件,路径需从其配置中确认:
- Nginx:检查 nginx.conf 中 Error_log 和 access_log 指令
- MySQL:查看 my.cnf 的 log_error 和 general_log_file
- docker 容器:日志默认在 /var/lib/docker/containers/[ID]/[ID]-json.log,也可用 docker logs [container]
- 找不到配置?试试:ps aux | grep -E “(nginx|mysql|java)”,再结合 lsof -p [PID] | grep log
快速定位日志文件的实用技巧
当只知道服务名但不知日志在哪,这几个命令组合效率很高:
- 查进程打开的日志文件:lsof -i :80 | awk ‘{print $2}’ | xargs -I{} lsof -p {} | grep log
- 全盘搜索含关键词的日志文件:find / -path “/proc” -prune -o -name “*.log” -name “*error*” 2>/dev/null | head -20
- 看服务是否记录到 syslog:grep -r “your-service-name” /etc/rsyslog.d/ /etc/syslog-ng/ 2>/dev/null
- 检查 systemd 服务 Unit 文件中的日志配置:systemctl cat nginx.service | grep -A5 “Log”