Прямо сейчас я пытаюсь использовать log4j2 войти все, что имеет уровень I NFO или выше (WARN, ошибка и FATAL) на мой сервер и все, что имеет уровень от INFO к моему пульт. Я могу регистрировать вещи на своей консоли, однако у меня возникла проблема с правильной регистрацией правильных уровней на сервере.Log4j2 не войдя в Graylog сервер правильно
Вот что я пытался до сих пор:
Java
import java.time.Instant;
import org.apache.log4j.PropertyConfigurator;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class App {
private static final Logger log4j = LogManager.getLogger(App.class.getName());
public static void main(String[] args) {
try {
String log4jConfPath = "src/main/resources/log4j2.xml";
PropertyConfigurator.configure(log4jConfPath);
log4j.info("this is a testmessage " + Instant.now().toString());
}
catch (Exception e) {
e.printStackTrace();
}
}
}
XML
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" packages="org.graylog2.log4j2">
<Properties>
<Property name="default_pattern">%d{MM/dd/yyyy hh:mm:ss} %5p %c{1} - %m%n
</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${default_pattern}" />
</Console>
<GELF name="gelfAppender" server="graylog.x.something.com"
hostName="some.host" port="12201">
<PatternLayout pattern="%d{dd MMM yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n" />
<KeyValuePair key="extractStacktrace" value="true" />
<KeyValuePair key="addExtendedInformation" value="true" />
<KeyValuePair key="facility" value="gelf-java" />
<KeyValuePair key="environment" value="TEST" />
<KeyValuePair key="application" value="MyApp" />
<KeyValuePair key="additionalFields" value="{'environment': 'TEST', 'application': 'MyAPP'}" />
</GELF>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="gelfAppender" />
<AppenderRef ref="console" />
</Root>
<Root level="info">
<AppenderRef ref="gelfAppender" />
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>
Приведенный выше код не выводит то, что я хочу, что иметь INFO вывода на консоль и INFO Уровни и выше вывод на сервер .
Вместо этого я могу выводить: ВСЕ (Trace) на консоль и INFO на сервер.
Я возился с XML файл немного, и я заметил, что когда я изменяю
status="trace"
в
status="off"
он записывает только INFO на консоль, но ничего к серверу ,
Наконец, и, вероятно, самая странная вещь всего, если я удалю
Instant.now().toString()
от моего оператора печати, то ничего не будет зарегистрирован на сервере, независимо от статуса (если это TRACE или OFF) , но он все равно записывается на консоль. я думал, что это что-то делать с рисунком макет моего GELF Appender, поэтому я изменил
<PatternLayout pattern="%d{dd MMM yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n" />
в
<PatternLayout pattern="${default_pattern}" />
, но это не меняет выход ...
Здесь мои текущие зависимости:
Короче говоря, я просто хочу регистрировать уровни INFO на моей консоли и уровни INFO или выше на моем сервере.
[Этот вопрос] (http://stackoverflow.com/questions/26108045/how-to-log-only-one-level-with-log4j2) рассказывает вам, как настроить Log4j2 так, чтобы INFO и только INFO log сообщения идут на консоль. Кроме того, я не уверен, почему у вас есть два '' элементов в '': поскольку я понимаю, что их должно быть только одно, попробуйте удалить '' и посмотреть, поможет ли это. –
Благодарим вас за ссылку. Я удалил лишний элемент ROOT и добавил пороговые фильтры, но все равно не повезло. –