如何在Eclipse RCP中使用log4j 2.1.0而不是slf4j 1.7.7?获取“ERROR StatusLogger Log4j2无法找到日志记录实现。”

时间:2014-11-21 15:21:46

标签: java eclipse-rcp slf4j log4j2

我试图让上述设置正常工作。

这就是我所做的。

  1. 构建了一个包含slf4j.api_1.7.7.jarorg.apache.logging.log4j.core_2.1.0.jarorg.apache.logging.log4j.api_2.1.0.jarorg.apache.logging.log4j.slf4j-impl_2.1.0.jar的p2回购。

  2. 在我的目标平台上消耗了这个p2 repo并将其添加到父POM中。

  3. 将所有4个插件添加到我的Eclipse插件项目中,作为MANIFEST.MF中的依赖项。

  4. 在我的Eclipse插件的log4j2.xml文件夹中创建了一个文件src/main/resources。内容如下。

  5. private static final Logger logger = LoggerFactory.getLogger(MyClass.class)

  6. 中添加了MyClass字段
  7. 名为MyClass的{​​{1}}。

  8. 运行整个事件,我收到了一条错误消息:logger.info("Hi from logger")

    所以似乎ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...正在运行?那log4j可以"使用" slf4j?正确?

    log4j显示在.classpath下方。

    那么问题是什么?

    log4j2.xml:

    log4j2.xml

    的.classpath

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
        <Appenders>
            <Console name="console" target="SYSTEM_OUT">
                <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
            </Console>
        </Appenders>
        <Loggers>
            <Root level="info" additivity="false">
                <AppenderRef ref="console"/>
            </Root>
        </Loggers>
     </Configuration>
    

1 个答案:

答案 0 :(得分:0)

诀窍是使用Buddy Class Loading

我在一个额外的插件中封装了log4j和slf4j等,我想通过其他插件来消费。当我在日志插件MANIFEST.MF中注册 BuddyPolicy 时,它工作正常:

Eclipse-BuddyPolicy: registered

我还必须在插件中注册日志插件(此处:my.app.logging)作为 Buddy (再次,在MANIFEST.MF中)我希望能够&#34;消耗&#34;日志插件(即核心插件 - 包含我的IApplication类的插件):

Eclipse-RegisterBuddy: my.app.logging

这样,说得非常简单,插件&#34;分享&#34;一个类加载器,参见上面的Buddy Class Loading链接。