Как использовать log4j 2.1.0 поверх slf4j 1.7.7 в Eclipse RCP? Получение «ОШИБКА StatusLogger Log4j2 не может найти реализацию ведения журнала».

1

Я пытаюсь заставить эту настройку работать.

Вот что я сделал.

  1. Построено репо 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.

  2. Потребление этого p2-репо в моей целевой платформе + добавило его в родительский POM.

  3. Добавлено все 4 плагина для моего проекта плагина Eclipse в качестве зависимостей в MANIFEST.MF.

  4. Создал файл log4j2.xml в log4j2.xml src/main/resources в моем плагине Eclipse. Содержание ниже.

  5. Добавлен private static final Logger logger = LoggerFactory.getLogger(MyClass.class) в MyClass

  6. В 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>
Теги:
slf4j
eclipse-rcp
log4j2

1 ответ

0
Лучший ответ

Хитрость заключается в использовании загрузки Buddy Class.

Я включил log4j и slf4j и т.д. В дополнительный плагин, который я хотел сделать расходным для других плагинов. Он работал, когда я зарегистрировал BuddyPolicy в плагине регистрации MANIFEST.MF:

Eclipse-BuddyPolicy: registered

Мне также пришлось зарегистрировать плагин регистрации (здесь: my.app.logging) в качестве Buddy (опять же, в MANIFEST.MF) в плагине, который я хотел бы "использовать" плагин регистрации (т.е. Основной плагин - тот, который содержит мой класс IApplication):

Eclipse-RegisterBuddy: my.app.logging

Таким образом, чтобы это было очень просто, плагины "делят" загрузчик классов, ср. ссылка на загрузку Buddy Class выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню