前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache自定义虚拟主机日志格式

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

作者头像
星哥玩云
发布2022-06-30 20:09:04
4850
发布2022-06-30 20:09:04
举报
文章被收录于专栏:开源部署开源部署

有时为了方便,我们需要自定义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的取值范围为:pid和tid(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冲突了)

X=

连接在应答完成前中断。

+=

应答传送完后继续保持连接。

-=

应答传送完后关闭连接。

X=

连接在应答完成前中断。

+=

应答传送完后继续保持连接。

-=

应答传送完后关闭连接。

%I

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

%O

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档