log4j2-gelf "ОШИБКИ StatusLogger appenders содержит недопустимый элемент или атрибут"GELF" "
Я только начал заходить в Graylog2 и хотел войти в некоторые Java-приложения через GELF Input. Поэтому я использовал библиотеку 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>
Кто-нибудь знаком с этой проблемой? Спасибо за любую помощь.
2 ответа
Похоже, что есть проблема либо с зависимостями, либо у log4j есть другие проблемы с загрузкой или инициализацией плагина appender GELF. Хорошей идеей будет упомянуть ваши точные зависимости как для log4j2, так и для log4j2-gelf. (В противном случае мы должны угадать...)
Кроме того, попробуйте настроить вывод состояния для трассировки
<configuration status="trace" ...
и взгляните на сообщения журнала log4j, которые отображаются на консоли. Это должно дать вам некоторое представление о том, что происходит не так. Надеемся, что в этом выводе есть четкое сообщение об ОШИБКЕ, которое говорит нам, в чем проблема.
Просто удалось решить проблему:)
Прежде всего, я поместил имя пакета, содержащего GELF-appender, в файл 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>
Затем я получил эту ошибку: "Этот код никогда не должен был превращаться в 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.