【发布时间】:2010-08-23 15:46:46
【问题描述】:
是否可以在 tomcat 5.5 设置中使用单个 log4j jar 文件,它可以被多个 web 应用程序使用并为每个 web 应用程序单独记录?
我编写了大约 8 个不同的 webapp,其中 log4j 属性文件之间唯一真正的区别是日志文件名。但是,如果我尝试将 log4j 从 webapp WEB-INF/lib 目录移动到 tomcat5 shared/lib 目录,我会遇到问题。
所有的属性文件基本上和下面的一样,我只是在代码中使用 System.setProperty("file.name", ) 设置了 file.name。真的没有必要,但我在玩弄为所有组件使用单个属性文件的想法。
log4j.rootLogger=DEBUG, LogFile
# stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
# LogFile
log4j.appender.LogFile=org.apache.log4j.RollingFileAppender
log4j.appender.LogFile.File=${file.name}
log4j.appender.LogFile.layout=org.apache.log4j.PatternLayout
log4j.appender.LogFile.MaxFileSize=500KB
log4j.appender.LogFile.MaxBackupIndex=5
log4j.appender.LogFile.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
基本上对于每个我想记录到单独文件的组件,但问题是如果我在 shared/lib 目录下包含 log4j,无论哪个 webapp 先被访问,都会有效地定义日志文件被所有 webapps 使用。即我不能使用单独的配置。
我知道的替代方案: 将 log4j 放入每个 war 文件的 WEB-INF/lib 目录中,这样我将获得每个 webapp 的单独配置。
将上面的“LogFile”引用更改为特定于每个 web 应用程序,以便每个属性文件有效地定义单独的配置。这似乎避免了以下错误“log4j:ERROR A “org.apache.log4j.RollingFileAppender”对象不可分配给“org.apache.log4j.Appender”变量。”
即使用类似下面的东西:
对于 WebApp1
log4j.rootLogger=DEBUG, LogFileWebapp1
# stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
# LogFile
log4j.appender.LogFileWebapp1=org.apache.log4j.RollingFileAppender
log4j.appender.LogFileWebapp1.File=${file.name}
log4j.appender.LogFileWebapp1.layout=org.apache.log4j.PatternLayout
log4j.appender.LogFileWebapp1.MaxFileSize=500KB
log4j.appender.LogFileWebapp1.MaxBackupIndex=5
log4j.appender.LogFileWebapp1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
对于 WebApp2
log4j.rootLogger=DEBUG, LogFileWebapp2
# stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
# LogFile
log4j.appender.LogFileWebapp2=org.apache.log4j.RollingFileAppender
log4j.appender.LogFileWebapp2.File=${file.name}
log4j.appender.LogFileWebapp2.layout=org.apache.log4j.PatternLayout
log4j.appender.LogFileWebapp2.MaxFileSize=500KB
log4j.appender.LogFileWebapp2.MaxBackupIndex=5
log4j.appender.LogFileWebapp2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
我更愿意坚持第一个属性文件的布局,并使其在 webapps 之间尽可能相似,并且还希望不必在每个 webapps 中包含单独的 log4j 副本。理想情况下,我希望只使用从 tomcat 共享 lib 目录到 log4j 系统副本的符号链接。
还有其他选择吗?
【问题讨论】:
标签: log4j tomcat5.5 web-applications