从Eclipse插件(强制编程模式)中加载log4j时,它表示虽然显示,但找不到根记录器信息。
SSCCE代码如下。它基于最简单的无头RCP应用程序示例:
package try_eclipsepluginlog4j_01;
import java.io.IOException;
import java.net.URL;
import org.apache.log4j.PropertyConfigurator;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Platform;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
import org.osgi.framework.Bundle;
/**
* This class controls all aspects of the application's execution
*/
public class Application implements IApplication {
static
{
try {
Bundle bundle = Platform.getBundle("Try_EclipsePluginLog4j_01");
URL config1 = bundle.getEntry("/conf/log4j.sample.xml");
URL config2 = FileLocator.resolve(config1);
PropertyConfigurator.configure(config2);
org.apache.log4j.Logger log4j = org.apache.log4j.Logger.getLogger(Application.class);
log4j.info("log4j is here");
}
catch(IOException e) {
}
}
// private static final Logger log = Logger.getLogger(Application.class);
/* (non-Javadoc)
* @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
*/
public Object start(IApplicationContext context) throws Exception {
System.out.println("Hello RCP World!");
return IApplication.EXIT_OK;
}
/* (non-Javadoc)
* @see org.eclipse.equinox.app.IApplication#stop()
*/
public void stop() {
// nothing to do
}
}
配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
输出如下:
log4j: Trying to find [log4j.xml] using context classloader org.eclipse.core.runtime.internal.adaptor.ContextFinder@58242ff4.
log4j: Trying to find [log4j.xml] using org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@547248ad[Try_EclipsePluginLog4j_01:1.0.0.qualifier(id=13)] class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader org.eclipse.core.runtime.internal.adaptor.ContextFinder@58242ff4.
log4j: Trying to find [log4j.properties] using org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@547248ad[Try_EclipsePluginLog4j_01:1.0.0.qualifier(id=13)] class loader.
log4j: Trying to find [log4j.properties] using ClassLoader.getSystemResource().
log4j: Could not find resource: [null].
log4j: Reading configuration from URL file:/D:/Users/Dims/Design/eclipse-rcp-kepler/Try_EclipsePluginLog4j_01/conf/log4j.sample.xml
log4j: Could not find root logger information. Is this OK?
log4j: Finished configuring.
log4j:WARN No appenders could be found for logger (try_eclipsepluginlog4j_01.Application).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hello RCP World!
项目结构如下:
最佳答案
由于您使用的是XML文件而不是属性文件,因此请尝试使用DOMConfigurator
而不是PropertyConfigurator
。
DOMConfigurator.configure(config2);