在Tomcat中配置访问日志Access Log

 

介绍

有时我们需要在T​​omcat中记录使用情况活动。可能是tomcat是该站点的主要Web服务器,我们想要记录站点活动(点击,页面浏览,错误)。可能是tomcat是应用程序服务器,我们想查看是否有任何测试系统投入生产,或者希望将资源请求与异常相关联。此HowTo旨在说明在tomcat中设置访问日志所需的步骤。在撰写本文时,tomcat 6仍是主流版本,因此本文档将使用tomcat 6作为示例,但我不希望有太多差异无法应用于tomcat 5.5或tomcat 7。

启用Tomcat访问记录器

通过修改server.xml文件并取消对“访问日志值”的注释,可以启用Tomcat访问日志记录。在默认的tomcat实现中,访问日志值部分位于Host元素内。取消注释该条目将启用一个访问日志,其中包含与Apache中“公共”日志文件格式等效的字段。值门的默认设置将导致文件名为“ localhost_access_log”,后跟日期,后跟“ .txt”文件扩展名。IP地址将被记录,而不是主机名和日志文件将被写入${tomcat.home}/logs目录。日志文件中使用通用格式显示的字段为:

客户端主机名(如果默认resolveHosts值未更改为“ true”,则记录为IP )。

远程逻辑用户名(始终显示“-”)。

远程认证的用户标识(如果存在)

要求的日期和时间

 

请求的HTTP方法和URI

HTTP响应状态代码

响应的大小(以字节为单位)(不包括http响应头)

以下是server.xml相关部分的摘要,显示了新启用的访问日志记录默认值:

<Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">

 

        <!-- SingleSignOn valve, share authentication between web applications

             Documentation at: /docs/config/valve.html -->

        <!--

        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />

        -->

 

        <!-- Access log processes all example.

             Documentation at: /docs/config/valve.html -->

       

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 

               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>

</Host>

自定义访问日志

通用日志格式是可以的,但是可以更改模式以combined添加User-Agent(浏览器或机器人类型)以及引荐网站和URI。Tomcat还提供了其他选项来记录诸如请求协议,接收到请求的本地端口,用户会话ID,传入或传出的请求标头等之类的内容。完整的列表记录在Tomcat配置参考值组件页面中。

如果您运行的tomcat版本大于6.0.21或tomcat 7,则可以利用新的远程IP Valve。对于访问日志记录,此值门的好处是,如果在X-Forwarded-For标头中传递了IP地址,它将自动将客户端IP与通过X-Forwarded-For标头传递的IP地址交换。加载非常简单。只需org.apache.catalina.valves.RemoteIpValve在AccessLogValve声明之前将添加到您的server.xml中即可。例如:

  <Host name="localhost"  appBase="webapps"

    unpackWARs="true" autoDeploy="true"

    xmlValidation="false" xmlNamespaceAware="false">

 

  <!-- SingleSignOn valve, share authentication between web applications

    Documentation at: /docs/config/valve.html -->

  <!--

    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />

  -->

 

  <!-- Remote IP Valve -->

    <Valve className="org.apache.catalina.valves.RemoteIpValve" />

 

  <!-- Access log processes all example.

    Documentation at: /docs/config/valve.html -->

       

  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 

    prefix="localhost_access_log." suffix=".txt"

    pattern="combined" resolveHosts="false"/>

  -->

 

</Host>

这足以使您开始使用RemoteIP Valve,但是您将需要添加一些其他设置来对其进行自定义,使其特定于您的环境。例如,如果您的服务器有一些F5 BigIP负载均衡,您将需要将SNAT IP的IP地址添加到RemoteIP Valve的internalProxies属性中。

如果您使用的tomcat 6版本早于6.0.21,并且您想存储X-Forwarded-For IP地址,则可以修改patternAccessLogValve的属性。您需要删除“ common”或“ combined”模式并将其替换为以下模式之一:

Common Log Format: %{X-Forwarded-For}i %l %u %t "%r" %s %b

Combined Log Format: %{X-Forwarded-For}i %l %u %t %r %s %b %{User-Agent}i %{Referer}i

 RemoteIP Valve确实处理的主要问题是,您只会在日志中获得X-Forwarded-For地址。如果您直接命中应用服务器,而绕过在请求中插入X-Forwarded-For标头的设备,则不会记录IP地址。您仍然会记录一个请求-您只是不知道它来自哪里。

 

猜你喜欢

转载自blog.csdn.net/allway2/article/details/109306839