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