阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Apache自定义虚拟主机日志格式

262次阅读
没有评论

共计 2998 个字符,预计需要花费 8 分钟才能阅读完成。

有时为了方便,我们需要自定义 apache 各虚拟主机的日志,以方便后续的日志分析工作。

常用的访问日志格式

通用日志格式(Common Log Format)

这是一个典型的记录格式:

LogFormat “%h %l %u %t \”%r\” %>s %b” common

CustomLog logs/access_log common

它定义了一种特定的记录格式字符串,并给它起了个别名叫 common,其中的 ”%” 指示服务器用某种信息替换,其他字符则不作替换。引号 (“) 必须加反斜杠转义,以避免被解释为字符串的结束。格式字符串还可以包含特殊的控制符,如换行符 ”\n”、制表符 ”\t”。

CustomLog 指令建立一个使用指定别名的新日志文件,除非其文件名是以斜杠开头的绝对路径,否则其路径就是相对于 ServerRoot 的相对路径。

组合日志格式(Combined Log Format)

另一种常用的记录格式是组合日志格式,形式如下:

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-agent}i\”” combined

CustomLog log/access_log combined

多文件访问日志

可以简单地在配置文件中用多个 CustomLog 指令来建立多文件访问日志。如下例,既记录基本的 CLF 信息,又记录提交网页和浏览器的信息,最后两行 CustomLog 示范了如何模拟 ReferLog 和 AgentLog 指令的效果。

LogFormat “%h %l %u %t \”%r\” %>s %b” common

CustomLog logs/access_log common

CustomLog logs/referer_log “%{Referer}i -> %U”

CustomLog logs/agent_log “%{User-agent}i”

此例也说明了,记录格式可以直接由 CustomLog 指定,而并不一定要用 LogFormat 起一个别名。

因此我们就可以在 httpd.conf 的 <VirtualHost *:80></VirtualHost> 标签里自定义自己的日志格式,而不需要系统的通用的日志格式。

管道日志

Apache httpd 可以通过管道将访问记录和出错信息传递给另一个进程,而不是写入一个文件,由于无须对主服务器进行编程,这个功能显著地增强了日志的灵活性。只要用管道操作符 ”|” 后面跟一个可执行文件名,就可以使这个程序从标准输入设备获得事件记录。Apache 在启动时,会同时启动这个管道日志进程,并且在运行过程中,如果这个进程崩溃了,会重新启动这个进程(所以我们称这个技术为 ” 可靠管道日志 ”)。

管道日志进程由其父进程 Apache httpd 产生,并继承其权限,这意味着管道进程通常是作为 root 运行的,所以保持这个程序简单而安全极为重要。

管道日志的一种重要用途是,允许日志滚动而无须重新启动服务器。为此,服务器提供了一个简单的程序 rotatelogs。每 24 小时滚动一次日志的例子如下:

CustomLog “|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400” common

注意:引号用于界定整个管道命令行。虽然这是针对访问日志的,但是其用法对于其他日志也一样。

在其他站点,有一个类似但更灵活的日志滚动程序叫 cronolog。

如果有较简单的离线处理日志的方案,就不应该使用条件日志和管道日志,即使它们非常强大。

同样我们也可以自定义日志格式如:

CustomLog “| /usr/sbin/rotatelogs -l /var/www/logs/my_access_log.%Y-%m-%d-%H_%M_%S 1800”  “%h %l %u %t \”%r\” %D  %>s %b \”%{Referer}i\””

另附日志格式中常用字符串:

格式字符串描述
%%百分号(Apache2.0.44 或更高的版本)
%a远端 IP 地址
%A本机 IP 地址
%B除 HTTP 头以外传送的字节数
%b以 CLF 格式显示的除 HTTP 头以外传送的字节数,也就是当没有字节传送时显示 ’-‘ 而不是 0。
%{Foobar}C在请求中传送给服务端的 cookieFoobar的内容。
%D服务器处理本请求所用时间,以微为单位。
%{FOOBAR}e环境变量 FOOBAR 的值
%f文件名
%h远端主机
%H请求使用的协议
%{Foobar}i发送到服务器的请求头 Foobar: 的内容。
%l远端登录名(由 identd 而来,如果支持的话),除非 IdentityCheck 设为 ”On“,否则将得到一个 ”-“。
%m请求的方法
%{Foobar}n来自另一个模块的注解 Foobar 的内容。
%{Foobar}o应答头 Foobar: 的内容。
%p服务器服务于该请求的标准端口。
%P为本请求提供服务的子进程的 PID。
%{format}P服务于该请求的 PID 或 TID(线程 ID),format的取值范围为:pidtid(2.0.46 及以后版本) 以及hextid(需要 APR1.2.0 及以上版本)
%q查询字符串(若存在则由一个 ”?“ 引导,否则返回空串)
%r请求的第一行
%s状态。对于内部重定向的请求,这个状态指的是 原始 请求的状态,—%>s则指的是最后请求的状态。
%t时间,用普通日志时间格式(标准英语格式)
%{format}t时间,用 strftime(3) 指定的格式表示的时间。(默认情况下按本地化格式)
%T处理完请求所花时间,以秒为单位。
%u远程用户名 (根据验证信息而来;如果返回 status(%s) 为 401,可能是假的)
%U请求的 URL 路径,不包含查询字符串。
%v对该请求提供服务的标准 ServerName
%V根据 UserCanonicalName 指令设定的服务器名称。
%X请求完成时的连接状态:

X=连接在应答完成前中断。
+=应答传送完后继续保持连接。
-=应答传送完后关闭连接。

(在 1.3 以后的版本中,这个指令是 %c,但这样就和过去的 SSL 语法:%{var}c 冲突了)

%I接收的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用 mod_logio 模块。
%O发送的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用 mod_logio 模块。

相关阅读

日志分析工具 Awstats 实战之 Apache 篇 - 多站点日志分析 http://www.linuxidc.com/Linux/2013-11/92273.htm

在 Ubuntu 13.10 下安装支持 SSL 的 Apache http://www.linuxidc.com/Linux/2013-11/92266.htm

再谈伪装 Apache 版本防止入侵 Web 服务器 http://www.linuxidc.com/Linux/2013-10/91179.htm

Apache Python 模块 mod_wsgi 的编译安装 http://www.linuxidc.com/Linux/2013-09/90637.htm

企业 Shell 脚本分析及切割 Apache 日志实战 http://www.linuxidc.com/Linux/2013-09/90627.htm

Linux 网站架构系列之 Apache—- 部署篇 http://www.linuxidc.com/Linux/2013-11/92304.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2998字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中