我们有一个动态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框,其中托管了应用程序服务器,并且日志文件名和文件权限是正确的。由于商业行为准则,我没有将其粘贴在问题描述中。
答案 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