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
slf4j.api_1.7.7.jar
,org.apache.logging.log4j.core_2.1.0.jar
,org.apache.logging.slf4j-impl_2.1.0.jar
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