【问题标题】:log4j: Could not find root logger information. Is this OK?log4j:找不到根记录器信息。这个可以吗?
【发布时间】:2014-02-04 20:12:49
【问题描述】:

从 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!

项目结构如下:

【问题讨论】:

  • 静态初始化程序中有一个捕获块吞噬了IOException。您是否可以在此处添加e.printStackTrace() - 或使用调试器检查代码没有落入此 catch 块?
  • 不,它不会掉在那里。

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


【解决方案1】:

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

DOMConfigurator.configure(config2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多