0

我想将所有 INFO 日志打印到我的控制台,但只将 ERROR 日志发送到我的 Airbrake appender。

我的 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] ERROR ... - 这是一个错误日志

我现在想添加 airbrake appender 并且只将 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 或将 appender 移动到根目录,我将同时看到 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>

我首先尝试了 ERROR 和 INFO ,它似乎最后定义的都是使用的。如果 INFO 最后出现,它将打印所有日志但不发送任何错误,如果 ERROR 最后出现,它将发送错误但不打印任何 INFO 日志。

如何让 Airbrake 捕获所有 ERROR 日志,但允许其他日志回退到根记录器而不将所有日志发送到 Airbrake appender?

4

0 回答 0