在探讨日志路径之前,先记住一条核心原则:生产环境中的日志路径,永远以配置文件为准。默认路径只是安装时的初始值,真正的日志位置必须到配置文件里去确认。下面我将常见服务的日志路径与查找方法系统整理出来,帮助你在排查故障时快速定位,少走弯路。
在实际生产部署中,很多服务的日志路径都会在配置文件里自定义,默认路径仅作为参考,真实路径必须从配置中获取。

1. Linux 系统日志
Linux 系统的日志基本上都存放在 /var/log 目录下。这个目录里包含多种日志类型,例如系统日志、内核日志、安全日志等。通常情况下,系统日志的路径很少被修改——很少有人会去改动它,当系统出现异常时,优先查看这个目录即可。
2. Web / 应用服务器日志
这类日志必须学会查看配置文件,因为大多数服务都会在配置文件中自定义日志路径,默认路径只能当作查找的线索。
(1) Nginx
日志目录通常由配置文件中的 access_log 和 error_log 指令指定。配置文件一般位于:
/etc/nginx/nginx.conf
/etc/nginx/conf.d/*.conf
如果是通过源码编译部署的,则需要根据你当时指定的路径来查找——没有固定规则。
(2) Apache(httpd)
日志目录通过配置文件中的 ErrorLog 和 CustomLog 定义。配置文件常见位置:
/etc/httpd/conf/httpd.conf
/etc/apache2/apache2.conf
不同环境安装后的路径会略有差异,但无非就是这几个常用位置。
(3) Tomcat(重点)
Tomcat 通常直接下载源码包解压后使用,注意解压之后的目录即可。
容器日志配置文件:
bin/catalina.sh
应用日志:
logback.xml
log4j2.xml
排查 Tomcat 故障时,核心在于应用日志,而不是 Tomcat 自身——很多人一上来就查看 catalina.out,其实业务抛出的异常都在应用日志里。
3. 数据库日志
(1) MySQL
通过 rpm 方式安装的 MySQL,默认日志目录在 /var/log/mysqld.log。配置文件通常位于以下两个文件之一(如果是源码编译安装,直接用 find 命令搜索 *.cnf 即可找到):
/etc/my.cnf
/etc/mysql/my.cnf
还有一种更高效的方法:直接在数据库内查询变量。
mysql -e "show variables like '%log%';"
MySQL 日志路径千万不要靠猜测,直接查询变量是最可靠的方式。
(2) Redis
Redis 的日志路径同样需要在配置文件中查找,logfile 字段后面就是日志路径。默认配置文件是 /etc/redis/redis.conf 或 /etc/redis.conf。
(3) MongoDB
默认日志路径:
/var/log/mongodb/mongod.log
可以在 /etc/mongod.conf 配置文件中通过 systemLog.path 参数控制日志路径。
4. 容器 / K8s 日志
容器类的日志在生产排障中直接使用场景不多,通常是通过 docker logs 或 kubectl logs 命令将日志输出到控制台。
(1) Docker
Docker 日志路径在 /etc/docker/daemon.json 文件中通过 log-opts 或 log-driver 配置。默认情况下日志会写入 /var/lib/docker/containers/ 目录下。
(2) Kubernetes
K8s 查看日志的常用命令:
kubectl logs pod-name
实际执行时会调取以下路径的日志信息并输出到前端控制台:
/var/log/containers/
/var/log/pods/
kubelet 的日志路径可以在 /var/lib/kubelet/config.yaml 中配置。K8s 日志由 kubelet 与容器运行时共同决定,两者缺一不可。
5. 其他服务日志路径
以下列出几种常见服务的日志路径,方便快速定位问题。
(1) Kafka
配置文件位于:
config/server.properties
日志路径由 log.dirs 字段控制。
(2) Elasticsearch
在配置文件 /etc/elasticsearch/elasticsearch.yml 中,path.logs 字段后面就是日志路径,例如:
path.logs: /data/elasticsearch/logs
(3) Logstash
在配置文件 /etc/logstash/logstash.yml 中直接查找 path.logs 字段。
(4) Filebeat
在配置文件 /etc/filebeat/filebeat.yml 中查找 path.logs 字段。如果日志本身没问题,请先检查采集组件是否正常运行。
(5) Jenkins
日志路径:
/var/log/jenkins/jenkins.log
配置文件 /etc/sysconfig/jenkins 中由参数 JENKINS_LOG 控制。
(6) GitLab
GitLab 日志存放在 /var/log/gitlab 目录下。因为 GitLab 会启动多个服务(例如 puma、sidekiq、nginx 等),每个服务都有独立的日志文件,都集中在这个目录中。
6. 搜索日志目录技巧
不同服务的安装方式不同,日志存储路径也千差万别。下面列举几种通用的查找方法:
(1) 查看进程,检查启动参数
ps -ef | grep -i nginx
ps -ef | grep -i ja va
查看启动参数中是否包含日志路径,如果没有则直接去查配置文件。
(2) 使用 lsof 查看进程当前正在写入的日志文件
lsof -p | grep log
这个技巧非常实用,可以直接看到进程当前正在读写的日志文件,省去猜测路径的麻烦。
(3) 查看配置文件
这是最通用的方法。每个服务都有对应的“日志配置项”,例如 Nginx 的 error_log、MySQL 的 log-error、Redis 的 logfile。找到配置文件后,逐行查看即可。
(4) 全局搜索
如果以上方法都无法找到,可以使用 find 命令进行全盘搜索:
find / -name "*.log"
这种方式通常是不熟悉环境的人才会采用,但在某些情况下确实是最后的救命手段。
真正的运维高手,并不是死记硬背日志路径,而是在任何环境下都能把日志找出来。关键在于理解每个服务的配置结构,而不是单纯记住路径。
