Java 在Eclipse RCP中如何在slf4j 1.7.7之上使用log4j 2.1.0?获得;错误状态记录器Log4j2找不到日志记录实现;

Java 在Eclipse RCP中如何在slf4j 1.7.7之上使用log4j 2.1.0?获得;错误状态记录器Log4j2找不到日志记录实现;,java,eclipse-rcp,slf4j,log4j2,Java,Eclipse Rcp,Slf4j,Log4j2,我正在努力使上述设置正常工作 这就是我所做的 构建了一个p2回购协议,包括slf4j.api_1.7.7.jar,org.apache.logging.log4j.core_2.1.0.jar,org.apache.logging.slf4j-impl_2.1.0.jar 在我的目标平台中消费此p2回购+将其添加到父POM 在MANIFEST.MF中将所有4个插件作为依赖项添加到我的Eclipse插件项目中 在我的Eclipse插件的src/main/resources文件夹中创建了一个文件lo

我正在努力使上述设置正常工作

这就是我所做的

  • 构建了一个p2回购协议,包括
    slf4j.api_1.7.7.jar
    org.apache.logging.log4j.core_2.1.0.jar
    org.apache.logging.slf4j-impl_2.1.0.jar

  • 在我的目标平台中消费此p2回购+将其添加到父POM

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

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

  • MyClass

  • MyClass
    中调用
    logger.info(“来自logger的Hi”)

  • 运行整个事件时,我收到一条错误消息:
    error StatusLogger Log4j2找不到日志实现。请将log4j核心添加到类路径。使用SimpleLogger登录控制台…

    看来
    log4j
    已经启动并运行了?而且
    slf4j
    可以“使用”
    log4j
    ?对吧?

    .classpath
    显示在
    log4j2.xml
    下面

    那么,问题出在哪里

    log4j2.xml:

    <?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>
    
    
    
    .classpath

    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
        <classpathentry kind="src" path="src/main/java"/>
        <classpathentry kind="src" path="src/main/resources"/>
        <classpathentry kind="output" path="target/classes/"/>
    </classpath>
    
    
    
    诀窍在于使用

    我将log4j和slf4j等封装在一个额外的插件中,我想让其他插件可以使用它。当我在日志插件的
    MANIFEST.MF
    中注册BuddyPolicy时,它起到了作用:

    Eclipse-BuddyPolicy: registered
    
    我还必须将日志插件(此处:
    my.app.logging
    )注册为插件中的好友(同样,在
    MANIFEST.MF
    ),以便能够“使用”日志插件(即核心插件-包含我的IApplication类的插件):

    这样,简单地说,插件“共享”一个类装入器,参见上面的Buddy类装入链接

    Eclipse-RegisterBuddy: my.app.logging