Я пытаюсь заставить эту настройку работать.
Вот что я сделал.
Построено репо p2, включая slf4j.api_1.7.7.jar
, org.apache.logging.log4j.core_2.1.0.jar
, org.apache.logging.log4j.api_2.1.0.jar
, org.apache.logging.log4j.slf4j-impl_2.1.0.jar
.
Потребление этого p2-репо в моей целевой платформе + добавило его в родительский POM.
Добавлено все 4 плагина для моего проекта плагина Eclipse в качестве зависимостей в MANIFEST.MF.
Создал файл log4j2.xml
в log4j2.xml
src/main/resources
в моем плагине Eclipse. Содержание ниже.
Добавлен private static final Logger logger = LoggerFactory.getLogger(MyClass.class)
в MyClass
В MyClass
называется 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...
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:
<?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>
Хитрость заключается в использовании загрузки Buddy Class.
Я включил log4j и slf4j и т.д. В дополнительный плагин, который я хотел сделать расходным для других плагинов. Он работал, когда я зарегистрировал BuddyPolicy в плагине регистрации MANIFEST.MF
:
Eclipse-BuddyPolicy: registered
Мне также пришлось зарегистрировать плагин регистрации (здесь: my.app.logging
) в качестве Buddy (опять же, в MANIFEST.MF
) в плагине, который я хотел бы "использовать" плагин регистрации (т.е. Основной плагин - тот, который содержит мой класс IApplication):
Eclipse-RegisterBuddy: my.app.logging
Таким образом, чтобы это было очень просто, плагины "делят" загрузчик классов, ср. ссылка на загрузку Buddy Class выше.