网站运行过程中报错,大多数人第一反应是查看日志。但日志文件存放目录没有统一标准,取决于服务器软件、操作系统,还有当初部署人员的配置。
Nginx是最普遍的web服务。默认配置下访问日志和错误日志放在 /var/log/nginx/,对应文件是 access.log 和 error.log。不过默认只是参考。如果通过apt这类包管理器安装Nginx,路径基本就是这个。源码编译安装的Nginx,日志目录大多在 /usr/local/nginx/logs/。还有使用一键脚本部署的环境,日志位置完全由脚本作者决定。

快速确认真实日志路径,直接查配置文件。Nginx主配置文件一般位于 /etc/nginx/nginx.conf,执行 grep -R "access_log" /etc/nginx/,就能找到access_log参数后面写的路径。如果搭建了多个站点,各个站点独立配置文件存放在 /etc/nginx/conf.d/ 或者 sites-enabled/,也可以单独检索这个目录。
Apache情况类似,不同发行版路径不一样。Debian和Ubuntu系统放在 /var/log/apache2/,里面是 access.log 和 error.log。CentOS、RHEL系列路径是 /var/log/httpd/,文件名下划线代替点号,也就是 access_log 和 error_log,这个细节没注意很容易找不到日志。一些老版本Apache会把日志放在 /etc/httpd/logs/,这个目录一般是软链接指向 /var/log/httpd。
Windows服务器部署IIS,日志路径相对固定。默认位置 C:inetpublogsLogFiles,每个网站拥有独立子文件夹,文件夹命名规则W3SVC加上网站ID,W3SVC1就是ID为1站点的日志目录。IIS日志按天生成,文件名类似 u_ex260917.log。想要获取站点准确日志路径,打开IIS管理器选中站点,双击日志选项,右侧目录栏就能看到真实存放位置。
宝塔面板环境下,日志统一托管。网站日志默认目录 /www/wwwlogs,每个站点日志文件后缀一般是.log。宝塔面板文件菜单进入www目录,打开wwwlogs文件夹就能查看。数据库日志路径 /www/server/data/,面板自身运行日志放在 /www/server/panel/logs/。
找到日志文件之后,查看方式又是另外一回事。小体积日志可以直接cat或者less打开,但网站日志经常几百MB甚至几个G,直接打开会卡死终端。tail命令实用性很高,可以查看末尾内容或者实时跟踪日志输出。tail -f /var/log/nginx/access.log 持续输出新写入日志,用来观察实时访问请求很方便。加上-n参数可以指定读取末尾行数,tail -n 100 读取最后一百行。
tail -f 有个坑,日志轮转切割之后,logrotate会把旧access.log重命名为access.log.1,新建空白access.log,tail -f还会继续读取已经改名的旧文件。改用 tail -F,可以自动追踪新生成日志文件。
单纯滚动查看日志效率偏低,搭配grep过滤才能快速定位信息。例如查找404报错,tail -f access.log | grep 404;监控单个IP访问,tail -f access.log | grep 1.2.3.4;统计访问量最高IP,awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20 这条组合命令经常用到。
Windows没有原生tail命令,IIS日志可以直接记事本或者文本编辑器打开。超大日志文件用Notepad++打开压力大,可以使用微软官方LogParser工具,支持类似SQL语句查询日志,统计高频访问IP、慢请求URL等内容。
排查故障的时候,错误日志价值高于访问日志。访问日志记录访客、访问页面、服务器返回状态码,但是500这类错误的详细原因,都会写在错误日志。Nginx error.log记录配置错误、上游超时、权限问题,Apache error_log作用相同。排查问题最好把访问日志和错误日志对照查看,比单独看一类日志效率更高。