设为首页 收藏本站
查看: 795|回复: 0

[经验分享] apache自定义虚拟主机日志格式

[复制链接]

尚未签到

发表于 2018-11-23 07:22:54 | 显示全部楼层 |阅读模式
  有时为了方便,我们需要自定义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的标签里自定义自己的日志格式,而不需要系统的通用的日志格式。
  

  

管道日志

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\""


详细内容请看: http://www.jinbuguo.com/apache/menu22/logs.html#page-header


另附日志格式中常用字符串:
格式字符串描述%%百分号(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冲突了)
%I接收的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。%O发送的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。


  

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-638396-1-1.html 上篇帖子: Apache Segmentaion Fault故障处理案例分析 下篇帖子: Apache24 + php5.5 + mysql5.6 搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表