Log4j2 и Airbrake - Как иметь разные уровни журнала для регистратора? - PullRequest
0 голосов
/ 10 июня 2019

Я хотел бы распечатать все журналы INFO на своей консоли, но отправлять только журналы ERROR моему приложению Airbrake.

Мой log4j2 имеет корневой регистратор, который добавляет ConsoleAppender и для которого установлен уровень журнала INFO.

<Loggers>
    <Root level="INFO">
        <AppenderRef ref="ConsoleAppender"/>
    </Root>
</Loggers>

Затем я создаю регистратор по имени моего приложения com.acme.app

Logger logger = LogManager.getLogger("com.acme.app");
logger.info("This is an info log");
logger.error("This is an error log");

В этой конфигурации при запуске приложения я получу вывод

2019-06-10 12:20:48 [main] INFO ... - Это информационный журнал

2019-06-10 12:20:48 [main] ОШИБКА ...- Это журнал ошибок

Теперь я хочу добавить приложение airbrake и отправлять только журналы ERROR на airbrake, но я хочу продолжить печать журналов INFO и ERROR.

<Loggers>
    <Root level="INFO">
        <AppenderRef ref="ConsoleAppender"/>
    </Root>

    <Logger name="com.acme.app" level="ERROR">
        <AppenderRef ref="Airbrake"/>
    </Logger>
</Loggers>

При этом начнется отправка журналов ОШИБКИ на мой воздушный тормоз, но теперь я только увижу журналы ОШИБКИ в консоли.

Если я установлю уровень на INFO или переместлю аппендера в корень, Я буду видеть журналы INFO и ERROR, но я также буду отправлять журналы INFO на airbrake, что нежелательно.

Я также попытался добавить несколько уровней для одного и того же имени регистратора и явно указать INFO обратно на консоль-

<Loggers>
    <Root level="INFO">
        <AppenderRef ref="ConsoleAppender"/>
    </Root>

    <Logger name="com.acme.app" level="ERROR">
        <AppenderRef ref="Airbrake"/>
    </Logger>

    <Logger name="com.acme.app" level="INFO">
        <AppenderRef ref="ConsoleAppender"/>
    </Logger>
</Loggers>

Сначала я попробовал и ОШИБКУ, и сначала ИНФО, и оно появляется в зависимости от того, чтопоследний определил то, что используется.Если INFO приходит последним, он печатает все журналы, но не отправляет никаких ошибок, если ERROR приходит последним, он отправляет ошибку, но не печатает ни одного из журналов INFO.

Как Airbrake может захватить всеОШИБКИ журналов, но позволяют другим журналам выполнять откат к корневому регистратору, не отправляя все журналы приложению Airbrake?

...