我使用了 Maven 存储库中的 log4j-1.2.17 包。 我尝试在包中执行此代码(我的包调用 log4j-1.2.17 包)
PropertyConfigurator.configure(props());
private static Properties props() {
Properties props = new Properties();
props.put("log4j.rootLogger", "INFO, R");
props.put("log4j.appender.R",
"org.apache.log4j.DailyRollingFileAppender");
props.put("log4j.appender.R.File", "logs/IhtikaClient.log");
props.put("log4j.appender.R.Append", "true");
props.put("log4j.appender.R.Threshold", "INFO");
props.put("log4j.appender.R.DatePattern", "'.'yyyy-MM-dd");
props.put("log4j.appender.R.layout", "org.apache.log4j.PatternLayout");
props.put("log4j.appender.R.layout.ConversionPattern",
//"%d{HH:mm:ss,SSS} %c - %m%n");
//"[%5p] %d{yyyy-MM-dd mm:ss} (%F:%M:%L)%n%m%n%n");
"[%5p] %d{yyyy-MM-dd mm:ss} %c (%F:%M:%L)%n%m%n");
return props;
}
但是我有错误
log4j:ERROR “org.apache.log4j.DailyRollingFileAppender”对象不可分配给“org.apache.log4j.Appender”变量。
log4j:错误类“org.apache.log4j.Appender”被加载
log4j:ERROR [org.apache.felix.framework.BundleWiringImpl@9da1dd] 而对象类型
log4j:错误“org.apache.log4j.DailyRollingFileAppender”由 [sun.misc.Launcher$AppClassLoader@4b222f] 加载。
log4j:错误无法实例化名为“R”的附加程序。
log4j:ERROR “org.apache.log4j.DailyRollingFileAppender”对象不可分配给“org.apache.log4j.Appender”变量。
log4j:错误类“org.apache.log4j.Appender”被加载
log4j:ERROR [org.apache.felix.framework.BundleWiringImpl@9da1dd] 而对象类型
log4j:错误“org.apache.log4j.DailyRollingFileAppender”由 [sun.misc.Launcher$AppClassLoader@4b222f] 加载。
log4j:ERROR 无法实例化名为“R”的附加程序。
Bundle 已按顺序加载
.getBundleContext().installBundle("......../log4j-1.2.17.jar")
.getBundleContext().installBundle("......../I_MainForm-1.0-SNAPSHOT.jar")
如何解决这个错误? 拜托,对不起我的英语。 最好的问候,亚瑟。
最佳答案
基本上,不要使用 org.osgi.framework.system.packages
将您的类“泄漏”到框架中或 org.osgi.framework.system.packages.extra
,除非你真的需要在你的代码中而不是修复一些其他问题。显然,这是 log4j 问题。
您可以通过设置系统属性来修复它:
-Dlog4j.ignoreTCL=true
关于log4j - OSGi 的类加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719218/