log4j:找不到根记录器信息。这个可以吗?

时间:2014-02-04 20:12:49

标签: java eclipse eclipse-plugin log4j eclipse-rcp

从Eclipse插件中加载log4j时(在强制编程模式下),它表示找不到root logger信息。

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!

项目结构如下:

enter image description here

1 个答案:

答案 0 :(得分:3)

由于您使用的是XML文件而不是属性文件,请尝试使用DOMConfigurator而不是PropertyConfigurator

DOMConfigurator.configure(config2);