动态Web项目 - 在应用程序中有一个log4j.jar,在api中有一个

时间:2013-05-31 19:52:09

标签: java log4j websphere websphere-7 log4j2

我们有一个动态Web项目,它使用log4j.jar(拥有自己的log4j.xml)来创建自定义应用程序日志,它还使用了一个api,它有自己的log4j.jar(拥有自己的log4j.xml)。 动态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

无法从api中删除log4j,因为需要在服务器启动时初始化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框,其中托管了应用程序服务器,并且日志文件名和文件权限是正确的。由于商业行为准则,我没有将其粘贴在问题描述中。

1 个答案:

答案 0 :(得分: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