本文介绍在Linux服务器中配置和读取Apache错误(Apache Error)和访问日志(Access Logs)。
前言 Apache是开放源代码和跨平台的HTTP服务器,它具有许多强大的功能,可以通过各种模块进行扩展,在管理Apache Web服务器时,您将执行的最常见任务之一是检查日志文件。参考在CentOS 8系统中安装Apache服务器的方法。 在对服务器或应用程序问题进行故障排除时,知道如何配置和读取日志非常有用,因为它们提供了详细的调试信息。 Apache用两种类型的日志记录其事件记录:访问日志和错误日志,访问日志包括有关客户端请求的信息,以及有关服务器和应用程序问题的错误日志信息。 本文介绍了如何配置和读取Apache访问和错误日志。
配置访问日志(Access Log) Apache Web服务器会在访问日志中为所有已处理的请求生成一个新事件,每个事件记录都包含一个时间戳,并包含有关客户端和所请求资源的各种信息,访问日志显示访问者的位置,他们访问的页面,他们在页面上花费的时间等等。 CustomLog指令定义日志文件的位置以及所记录消息的格式。 CustomLog指令的最基本语法如下: CustomLog log_file format [condition]; log_file可以相对于ServerRoot或相对于日志文件的完整路径,日志消息也可以使用管道符号|通过管道传输到另一个程序。 第二个参数format指定日志消息的格式,它可以是显式格式定义,也可以是LogFormat指令定义的昵称: LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog logs/access.log combined CustomLog logs/access.log "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" 为避免多次重复同一代码,最好定义LogFormat指令并将其用作CustomLog指令的昵称。 第三个参数[condition]是可选的,它允许您仅在满足特定条件时编写日志消息,通常,这是使用环境变量完成的,可以用!否定条件符号。 例如,如果要排除对要写入日志文件的css文件的请求,则可以使用以下命令: SetEnvIf Request_URI \.css$ css-file CustomLog logs/access.log custom env=!css-file 要更改日志记录格式,可以定义新的LogFormat指令,也可以覆盖默认格式,通常,最好定义一种新格式。 虽然访问日志提供了非常有用的信息,但它占用了磁盘空间,并可能影响服务器性能,如果服务器资源不足,并且网站繁忙,则可能要禁用访问日志。 为此,只需注释掉或从主服务器配置和虚拟服务器部分中删除CustomLog指令。 如果只想关闭一个虚拟主机的访问日志,请将CustomLog指令的第一个参数设置为/dev/null: CustomLog /dev/null combined
配置错误日志(Error Log) Apache将有关应用程序和常规服务器错误的消息写入错误日志文件,如果您在Web应用程序中遇到错误,则错误日志是开始进行故障排除的第一个位置。 ErrorLog伪指令定义错误日志的名称位置,它采用以下形式: ErrorLog log_file 如果log_file的路径不是绝对路径,则将其设置为相对于ServerRoot的路径,错误消息也可以使用管道符号|通过管道传输到另一个程序。 LogLevel参数设置日志记录的级别,以下是按严重性(从低到高)列出的级别: trace1 - trace8-跟踪消息。 debug-调试消息。 info-参考消息。 notice-注意。 warn-警告。 error-处理请求时出错。 crit-关键问题,需要迅速采取行动。 alert-警报,必须立即采取行动。 emerg-紧急情况,系统处于无法使用状态。 每个日志级别包括更高级别,例如,如果将日志级别设置为警告,则Apache还将写入错误,警报和emerg消息等。 如果未指定LogLevel参数,则默认为警告,建议将级别至少设置为crit。 ErrorLogFormat伪指令指定错误日志的格式,在大多数Linux发行版中,Apache服务器使用默认格式,这在大多数情况下已足够。
虚拟主机和全局日志 可以在全局或每个虚拟主机的基础上设置日志记录行为和文件位置。 然后在主服务器上下文中设置CustomLog或ErrorLog伪指令,服务器将所有日志消息写入相同的访问和错误日志文件,否则,如果将指令放置在<VirtualHost>块内,则仅将该虚拟主机的日志消息写入指定的文件。 在<VirtualHost>块中设置的log指令将覆盖服务器上下文中的一个。 没有CustomLog或ErrorLog指令的虚拟主机会将其日志消息写入全局服务器日志。 为了提高可读性,建议为每个虚拟主机设置单独的访问和错误日志文件,这是一个例子: <VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin webmaster@example.com DocumentRoot /var/www/example.com/public LogLevel warn ErrorLog /var/www/example.com/logs/error.log CustomLog /var/www/example.com/logs/access.log combined </VirtualHost> 每当您修改配置文件时,都必须重新启动Apache服务才能使更改生效。
日志文件的位置 默认情况下,在基于Debian的发行版(如Ubuntu)上,访问和错误日志位于/var/log/apache2目录中,在CentOS上,日志文件位于/var/log/httpd目录中。下面教您阅读和了解Apache日志文件。 可以使用cat、less、grep、cut、awk等标准命令打开和解析日志文件。 以下是使用Debian合并日志格式的访问日志文件中的示例记录: 192.168.33.1 - - [08/Jan/2020:21:39:03 +0000] "GET / HTTP/1.1" 200 6169 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" 让我们分解一下记录中每个字段的含义: %h - 192.168.33.1-发出请求的客户端的主机名或IP地址。 %l - --远程日志名,未设置用户名时,此字段显示-。 %u - --如果请求已通过身份验证,则显示远程用户名。 %t - [08/Jan/2020:21:39:03 +0000]-本地服务器时间。 \"%r\" - "GET / HTTP/1.1"-请求的第一行,请求类型,路径和协议。 %>s - 200-最终服务器响应代码,如果未使用>符号,并且该请求已在内部重定向,它将显示原始请求的状态。 %O - 396-服务器响应的大小(以字节为单位)。 \"%{Referer}i\" - "-"-推介网址。 \"%{User-Agent}i\" - Mozilla/5.0 ...-客户端的用户代理(Web浏览器)。 使用tail命令实时查看日志文件: tail -f access.log
结论 日志文件为您提供有关服务器问题以及访问者如何与您的网站进行交互的有用信息。 Apache有一个非常可配置的日志记录系统,该系统允许您根据需要自定义访问和错误日志。
相关主题 |