问题描述:
之前在测试环境(一台Linux主机)部署了多个tomcat实例(使用cp命令,修改端口),然后将同一个应用部署到多个tomcat实例下,logback配置文件中配置不同的目录作为日志输出地,但是在多个tomcat实例同时运行时,logback配置不起作用,即日志并没有输出到每个tomcat实例对应webapp目录下应用中logback.xml中配置的日志输出目录,而是都输出到了各tomcat实例的logs/catalina.out中,导致catalina.out文件过大,不利于日志查看
后来同时说他在本地还原测试环境,测试时发现日志全输出到第一个启动的tomcat实例中对应的应用配置的logback.xml中配置的日志输出目录中,至于是不是多tomcat实例下logback读取的都是内存中的同一个还有待求证。
解决:
项目中使用了spring MVC框架,加上logback的spring扩展就OK了,具体如下:
1、下载logback的spring扩展包 logback-ext-spring-0.1.1.jar,放入classpath中,注意,如果jre是1.6及以下的,必须使用0.1.1版本的扩展,0.1.2版本及以上的扩展包使用了jdk7编译;
2、在web.xml中加入监听
- <context-param>
- <param-name>logbackConfigLocation</param-name>
- <param-value>classpath:logback.xml</param-value>
- </context-param>
- <listener>
- <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
- </listener>
该监听器最好放置在spring的监听器前。
当在同一台Linux主机上部署多个Tomcat实例,并将同一应用分配到不同实例时,Logback配置未能按预期将日志输出到各自应用的指定目录,而是统一写入到catalina.out。经测试,日志可能只输出到第一个启动的Tomcat实例。为解决此问题,在项目中引入logback的Spring扩展,通过在web.xml中配置LogbackConfigListener监听器,确保每个实例独立读取并应用logback.xml配置,从而实现日志正确输出。
1017

被折叠的 条评论
为什么被折叠?



