log4j2-gelf ОШИБКА Приложение StatusLogger содержит недопустимый элемент или атрибут GELF

только начал входить в Graylog2 и хотел зарегистрировать некоторые Java-приложения через ввод GELF. Поэтому я использовал библиотеку log4j2 и добавил Graylog2-gelfclient. Все зависимости удовлетворены и программа работает. Но инициализация моего Logmanager выдает следующую ошибку:

ERROR StatusLogger appenders contains an invalid element or attribute "GELF"

Мой код просто регистрирует ошибку в регистраторе:

static final Logger logger = LogManager.getLogger(Application.class); 
    public static void main(String[] args) {
        logger.error("This is an error log entry");
    }
}

и мой файл log4j2.xml настроен на использование GELF и GelfAppender:

<configuration status="OFF">
    <appenders>
        <GELF name="gelfAppender" server="192.168.1.1" port="12201" hostName="myhost"/>
    </appenders>
    <loggers>
        <root level="info">
            <appender-ref ref="gelfAppender"/>
        </root>
    </loggers>
</configuration>

Кто-нибудь знаком с этой проблемой? Спасибо за любую помощь.


person Felix    schedule 21.10.2014    source источник


Ответы (2)


Похоже, есть проблема либо с зависимостями, либо с log4j есть какие-то другие проблемы с загрузкой или инициализацией подключаемого модуля GELF. Может быть хорошей идеей указать ваши точные зависимости как для log4j2, так и для log4j2-gelf. (Иначе мы должны угадать...)

Кроме того, попробуйте настроить вывод состояния для трассировки с помощью

<configuration status="trace" ...

и взгляните на сообщения внутреннего журнала log4j, которые отображаются на консоли. Это должно дать вам некоторое представление о том, что происходит не так. Надеемся, что в этом выводе есть четкое сообщение уровня ERROR, которое говорит нам, в чем проблема.

person Remko Popma    schedule 22.10.2014

Просто удалось решить проблему :)

Прежде всего, я помещаю имя пакета, содержащего GELF-аппендер, в файл log4j2.xml.

<configuration status="OFF" packages="org.graylog2.log4j2">
   <appenders>
      <GELF name="gelfAppender" server="192.168.1.1" port="12202" hostName="myhost"></GELF>
   </appenders>
   <loggers>
      <root level="info">
         <AppenderRef ref="gelfAppender"/>
      </root>
   </loggers>

Then I got this error: "This code should have never made it into slf4j-api.jar"

Я вообще не использовал Maven, чтобы получить все необходимые пакеты. Итак, я использовал Maven, и это дало мне подсказку, что импортированные .java-файлы slf4j-api не являются ожидаемыми. Если вы загружаете официальный дистрибутив SLF4J, будьте осторожны с импортируемыми файлами. Во-первых, я импортировал java-файлы из папки «slf4j-api», но эта папка содержит папку «impl», которая вызвала ошибку, о которой я упоминал выше. Итак, я импортировал sl4j-api-1.7.7.jar, который также находится в официальном дистрибутиве SLF4J (этот jar не содержит пакета «impl»), и теперь он работает нормально.

Примечание. Я получил это сообщение при запуске программы:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
person Felix    schedule 23.10.2014