在apache logwatch报告中包含主机名

Modified on: Wed, 15 May 2019 22:20:02 +0800

使用apache托管多个域时,查看包含虚拟主机名的log​​watch apache输出很有用,但我只能得到:

 --------------------- httpd Begin ------------------------

 Requests with error response codes
   400 Bad Request
      /: 1 Time(s)
      /robots.txt: 1 Time(s)

虽然我想要像

这样的东西

 --------------------- httpd Begin ------------------------

 Requests with error response codes
   400 Bad Request
      example.com/: 1 Time(s)
      example.org/robots.txt: 1 Time(s)

如何使用logwatch实现这一目标?

最佳答案

试试这个(适合我):
httpd.conf中的LogFormat定义为

  

LogFormat“%h%t [%V] \”%r \“%> s \”%{Referer} i \“”

对于这种特殊情况,您将拥有remote_address,日期/时间,[根据UseCanonicalName设置的服务器名称],请求,satus代码和Referer
(这是我想要的格式),然后把

  

$ LogFormat“%h%t%V \”%r \“%> s \”%{Referer} i \“”

在您的services / http.conf LogWatch文件中。
那将

  1. 让apache输入主机名(Canonical与否,取决于你是否使用%v或%V)
  2. 强制LogWatch了解您的Apache Access日志
  3. 醇>

    以下是使用此特定指令集的日志输出中的一行示例:

      

    172.3.20.11 [01 / Jun / 2011:21:00:52 +0200] joomla.local“GET /images/tabs_back.png HTTP / 1.1”404“http://joomla.local/templates/beez_20/css/personal.css

    如果我们关注错误代码,以及如何在LogWatch中处理它们,可以对 / usr / share / logwatch / scripts / services / http 进行一些更改:
    添加:

      

    my $ my_host =“”;
      我的$ my_url =“”;

    然后,关于第462行,添加此行以保存第4列(HOST):

      

    $ field {my_host} = $ field {$ log_fields [3]};

    在第560行中,fmt_url缩短后(if (length($field{url}) &gt; 60) {...})添加:< / p>

    $my_host = $field{$log_fields[3]};
    $my_host = substr($my_host,1);
    $my_url=$my_host . $fmt_url;
    

    最后,改变:

    $needs_exam{$field{http_rc}}{$fmt_url}++;

    通过

    $needs_exam{$field{http_rc}}{$my_url}++; 强>

    这样做,你会在你的Logwatch中有这个:

    带有错误响应代码的
    Requests with error response codes
    404 Not Found
    joomla.local/images/tabs_back.png: 3 Time(s)
    

    我希望它可以帮助你所有人

作者:Jakuje,Syquus

相关问答

添加新评论