本文描述如何配置tomcat的访问日志,按我们的要求输出指定的日志格式。
且在Nginx+Tomcat的配置环境中,如何让Tomcat记录访客真实的IP地址。
本文为原创内容,转载请注明出处:JDiy官网 http://jdiy.net/read.jsp?id=y0hab3qs03
在tomcat的server.xml文件中,host主机配置区域找到类似如下(红色部分)即为访问日志的配置:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
unpackWARs="true" autoDeploy="true">
<!--...部分内容略..-->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
其中的directory用于指定日志的存放路径,默认位于tomcat的logs目录中,例如我们可以修改成:
directory="c:/wwwlogs" 使日志放到c:\wwwlogs目录中去。
其中的prefix和suffic分别用于指定日志文件的前缀和后缀,不用我多说。
现在我们主要来看一下pattern配置段,它用于指定日志的输出格式。有效的日志格式模式可以参见下面内容,如下字符串,其对应的信息由指定的响应内容取代:
%a - 远程IP地址
%A - 本地IP地址
%b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
%B - 发送的字节数,不包括HTTP头
%h - 远程主机名
%H - 请求协议
%l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
%m - 请求方法
%p - 本地端口
%q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
%r - 第一行的要求
%s - 响应的HTTP状态代码
%S - 用户会话ID
%t - 日期和时间,在通用日志格式
%a - 远程IP地址
%A - 本地IP地址
%b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
%B - 发送的字节数,不包括HTTP头
%h - 远程主机名
%H - 请求协议
%l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
%m - 请求方法
%p - 本地端口
%q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
%r - 第一行的要求
%s - 响应的HTTP状态代码
%S - 用户会话ID
%t - 日期和时间,在通用日志格式
%u - 远程用户身份验证
%U - 请求的URL路径
%v - 本地服务器名
%D - 处理请求的时间(以毫秒为单位)
%T - 处理请求的时间(以秒为单位)
%I (大写的i) - 当前请求的线程名称
此外,您可以指定以下别名来设置为普遍使用的模式之一:
%U - 请求的URL路径
%v - 本地服务器名
%D - 处理请求的时间(以毫秒为单位)
%T - 处理请求的时间(以秒为单位)
%I (大写的i) - 当前请求的线程名称
此外,您可以指定以下别名来设置为普遍使用的模式之一:
common - %h %l %u %t "%r" %s %b
combined - %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"
另外,还可以将request请求的查询参数、session会话变量值、cookie值或HTTP请求/响应头内容的变量值等内容写入到日志文件。
它仿照了apache的语法:
%{XXX}i xxx代表传入的头(HTTP Request)
%{XXX}o xxx代表传出的响应头(Http Resonse)
%{XXX}c xxx代表特定的Cookie名
%{XXX}r xxx代表ServletRequest属性名
%{XXX}c xxx代表特定的Cookie名
%{XXX}r xxx代表ServletRequest属性名
%{XXX}s xxx代表HttpSession中的属性名
举例说明:
例如我们在架设jsp服务器时,采用Nginx+Tomcat这种配置时,将请求由Nginx转发给Tomcat,当需要在tomcat的日志中记录来访者的真实IP地址信息时,我们就需要做一点点有别于其它的特殊匹配了,要不然tomcat记录的访客IP全都是127.0.0.1, 这是因为所有的请求都是由Nginx前端服务器转发而来的,而前端服务器对于tomcat来说就是127.0.0.1。
下面,我们来看一下如何让tomcat记录用户的真实IP地址:
一、配置Nginx转发IP头:
在Nginx的server主机配置段中添加:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
说明:上面两行用于向tomcat发送真实的远端主机名和IP地址。其中的Host代表主机名, X-Real-IP代表主机IP,对于HTTP头部内容,这些变量是不区分大小写的。
二、配置Tomcat日志记录客户真实IP:
在Tomcat中要记录来访者真实IP,大家参考上面所述的tomcat日志配置语法,只需在日志模式中添加如下模式就行了:%{X-Real-IP}i
如下面完整的Tomcat日志配置段:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="c:/wwwlogs/" prefix="cluster." suffix=".log"
pattern="%{X-Real-IP}i %u %t %r %s %b" resolveHosts="false" />
注意:上两两处修改后,您应该重新启动Nginx和Tomcat服务,以使您的修改生效。这样,当有新的请求过来时,便可以在Tomcat日志文件中记录访客的真实IP地址了。
=====================================以上为转载
本机配置(不带nginx):
server.xml:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t %r %s %b %D %{Cookie}i %{User-Agent}i %{a}r"
resolveHosts="false"/>
输出:
127.0.0.1 - - [25/Feb/2013:11:57:29 +0800] GET /app_back/index.do?a=12345 HTTP/1.1 200 59847 688 JSESSIONID=5F171789DDF29AB377F68B52BB18884E; mysessionid=3af66463-79a3-4b6c-a4c5-e7cd39a0aead Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0 -
其中 url中的参数a可以在url中显示出来,但是post方式提交的request中的参数无法记录。
相关推荐
`Logback`由著名的`Log4j`创始人Ceki Gülcü创建,它提供了更高效的日志处理机制,并且功能更加强大,包括日志级别控制、日志格式化、日志归档等。在`Tomcat`中配置`Logback`,可以有效地控制`catalina.out`的大小...
在给定的文件中,我们可以看到一个完整的Logstash配置示例,其目的是将Tomcat日志进行结构化处理并输出为JSON格式。 ##### 2.1 Input(输入) ```yaml input{ beats{port=>"9988"} } ``` - **beats**:此段配置...
- Tomcat的日志文件默认位于`logs`目录,可以通过`logging.properties`文件定制日志级别和输出格式。 4. **安全性**: - `server.xml`中的`<Realm>`元素用于配置用户认证,如简单的用户名/密码文件 Realm 或者与...
压缩包中的"**log4j.properties**"文件是Log4j的配置文件,用于定义日志的输出级别、格式、目的地等。配置文件中的关键字和参数包括: 1. **rootLogger**: 定义了应用的根日志器,设置其级别(如DEBUG, INFO, WARN,...
配置Tomcat-Juli** Tomcat-Juli是Tomcat的内置日志系统,它提供了一个名为`java.util.logging`的API。要启用Log4j,我们首先需要创建一个名为`logging.properties`的文件,并将其放入Tomcat的`conf`目录下。在这个...
你可以在这里修改日志级别、日志输出位置和格式。 6. **Context配置**:在`conf/Catalina/localhost`目录下,每个`.xml`文件代表一个应用的Context配置。这些文件可以定制应用的初始化参数、资源加载路径等。 7. *...
日志配置主要通过`conf/logging.properties`文件进行,这里定义了日志处理器(handler)的类型、级别、格式等。默认使用Java Util Logging(JUL)框架,但也可以通过引入Log4j或Logback等第三方日志库进行替换。 3...
通过配置`logging.properties`,可以自定义日志级别、输出格式和目标。 总结,Tomcat的配置涉及到多个层面,从服务器全局到特定应用,从安全性到性能优化,每一步都需要细致入微的调整。理解并掌握这些配置,将使你...
这里配置了访问日志的输出目录、文件名前缀、后缀和日志格式。 6. **自定义服务器端点**: 通过`<Connector>`元素可以配置不同的网络连接器,比如HTTP、HTTPS等,调整端口、协议和其他连接参数。 7. **JVM设置**...
- 如果一切正常,控制台会出现日志输出,表示服务正在运行。 4. **访问项目** - 在浏览器地址栏中输入`http://localhost:8080/项目名`,即可访问已发布的Web项目。 - 其中“项目名”即为WAR包中的应用程序名称,...
1. 日志系统:Tomcat的日志输出可以通过`logging.properties`配置,支持标准输出、文件、syslog等多种方式。 2. 错误页面:通过`error-page`元素在`web.xml`中指定特定HTTP状态码对应的错误页面。 七、性能优化 1....
- **日志管理**:自定义log4j.properties或logging.properties,控制日志输出级别和格式,便于调试和监控。 通过上述步骤,不仅能够完成Tomcat 6.0的基本配置,还能进一步理解JSP、Servlet和Bean的工作原理,为后续...
### Tomcat配置优化知识点 #### 一、Tomcat设置Gzip,减少网络流量 Gzip是一种常见的压缩方式,用于减少HTTP响应体的大小,从而降低网络传输的数据量,提高加载速度。在Tomcat中启用Gzip可以显著提高Web应用的性能...
可以通过修改`logging.properties`来定制日志级别和输出格式。 **六、安全配置** 1. **SSL/TLS配置**: 如果需要启用HTTPS,需要在`server.xml`中配置`Connector`元素的`scheme`、`secure`和`SSLEnabled`属性,并...
7. **日志和错误处理**:Tomcat将日志输出到`logs`目录下的文件,如`catalina.out`,这对于调试和监控服务器状态至关重要。 8. **性能优化**:Tomcat可以通过调整线程池大小、缓存配置、JVM参数等进行性能优化。...
1. 日志配置:通过logging.properties文件配置日志级别、格式和输出位置。 2. 错误追踪:利用 catalina.out 和 localhost.*.log 文件分析运行问题。 九、Tomcat与其他应用服务器比较 对比Jetty、WebLogic、...
13. **日志和调试**:Tomcat的日志系统允许配置多个日志文件,并通过`logging.properties`文件调整日志级别和输出格式。 14. **版本兼容性**:Apache Tomcat 6.0.29适用于Java SE 5和6,但不再支持最新的Java版本。...
5. **tomcat-users.xml** - 用户和角色的配置,管理Tomcat的访问权限。注意,如果用户密码包含中文,需要正确编码存储。 6. **server.properties** 和 **catalina.properties** - 包含服务器级别的配置,如Java环境...
通过配置,可以定制日志级别和输出位置。 9. **国际化与本地化**: Tomcat支持多语言环境,Web应用可以通过资源包(`.properties`文件)提供不同语言的用户界面。 10. **社区与文档**: Apache Tomcat有一个活跃的...
Tomcat是一个广泛使用的开源Java Servlet容器,它允许开发者部署Web应用程序,包括WAR(Web Application Archive)格式的文件。以下是一份详细的步骤指南,涵盖了从打包WAR文件到在Linux服务器上部署和管理的全过程...