0

我们有一个动态 Web 项目,它使用 log4j.jar(有它自己的 log4j.xml)来创建自定义应用程序日志,它还使用一个有自己的 log4j.jar(有它自己的 log4j.xml)的 api。动态 web 项目托管在 websphere 上,api 配置为共享库。

当从模块调用 api 方法时。SystemErr.log 文件中打印以下错误。

Parent: com.ibm.ws.classloader.ProtectionClassLoader@61ea61ea
   Delegation Mode: PARENT_LAST] whereas object of type
[5/30/13 8:05:29:421 EDT] 00000039 SystemErr     R log4j:ERROR "org.apache.log4j.DailyRollingFileAppender" was loaded by [
com.ibm.ws.classloader.CompoundClassLoader@d4c0d4c[war:ModuleName of the Web Project]
   Local ClassPath:class path is printed



[5/30/13 5:32:55:632 UTC] 0000003e SystemErr     R log4j:ERROR Could not instantiate appender named LOGGER_NAME.
[5/30/13 5:32:55:632 UTC] 0000003e SystemErr     R log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
[5/30/13 5:32:55:632 UTC] 0000003e SystemErr     R log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
[5/30/13 5:32:55:633 UTC] 0000003e SystemErr     R log4j:ERROR [
com.ibm.ws.classloader.ExtJarClassLoader@18d418d4[server:0]
   Local ClassPath:  class path is printed

log4j 不能从 api 中删除,因为它需要在服务器启动时初始化 api。当从模块调用 api 时,会打印上述错误。

Dynamic web projects log4j.properties

log4j.rootLogger=DEBUG, APP_LOGGER_NAME1

log4j.appender.APP_LOGGER_NAME1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.APP_LOGGER_NAME1.layout=org.apache.log4j.PatternLayout
log4j.appender.APP_LOGGER_NAME1.layout.ConversionPattern=[%20.20d{dd/MMM/yyyy-HH:mm:ss}] %6.6p - %-35.35c{2} :: %m%n
log4j.appender.APP_LOGGER_NAME1.File=path of log file
log4j.appender.APP_LOGGER_NAME1.DatePattern='.'yyyy-MM-dd


API log4j.properties

log4j.rootLogger=DEBUG, APP_LOGGER_NAME2
log4j.appender.APP_LOGGER_NAME2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.APP_LOGGER_NAME2.layout=org.apache.log4j.PatternLayout
log4j.appender.APP_LOGGER_NAME2.layout.ConversionPattern=[%20.20d{dd/MMM/yyyy-HH:mm:ss}] %6.6p - %-35.35c{2} :: %m%n
log4j.appender.APP_LOGGER_NAME2.File=path of log file
log4j.appender.APP_LOGGER_NAME2.DatePattern='.'yyyy-MM-dd

请注意,我们有一个 AIX 框,其中托管了应用程序服务器,并且日志文件名和文件权限是正确的。由于商业行为准则,我没有将它们粘贴在问题描述中。

4

1 回答 1

1

在 log4j2 中,可以在 Web 应用程序和容器类路径中拥有单独的日志配置。请参阅: http: //logging.apache.org/log4j/2.x/manual/logsep.html

log4j-1.x 文档在这个主题上有点薄。如果迁移到 log4j2 不适合您,我建议您在 log4j 用户邮件列表中提问;那是专家们闲逛的地方。

作为参考,我认为这可能是您看到的问题的原因:http: //logback.qos.ch/manual/loggingSeparation.html#tamingStaticRefs

于 2013-06-01T23:25:41.780 回答