我想将所有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]错误...-这是错误日志
我现在想添加气压刹车附加程序,并且仅将错误日志发送到气压刹车,但是我想继续打印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>
我先尝试了ERROR,然后又尝试了INFO,然后似乎使用的是最后定义的那个。如果INFO排在最后,它将打印所有日志,但不发送任何错误;如果ERROR排在最后,它将发送错误,但不打印任何INFO日志。
我如何让Airbrake捕获所有的错误日志,但是又允许其他日志回退到根记录器,而不将所有日志发送到Airbrake附加器?