我正在设置更复杂的日志记录,然后是简单的控制台输出。 Logback 通过 ConsoleAppender
很好地写入日志。但是当我添加额外的 RollbarAppender
时,它不起作用。
这是 logback.xml 的示例
<?xml version="1.0" encoding="UTF-8"?>
<configuration >
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%highlight([%level]) - [%date] - [%logger] %msg%n</pattern>
</encoder>
</appender>
<appender name="ROLLBAR" class="com.rollbar.logback.RollbarAppender">
<accessToken>VERY_SECRET_TOKEN</accessToken>
<encoder>
<pattern>%highlight([%level]) - [%date] - [%logger] %msg%n</pattern>
</encoder>
</appender>
<logger name="akka" level="ERROR" additivity="false">
<appender-ref ref="ROLLBAR" />
</logger>
<logger name="slick" level="ERROR"/>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
同时,此配置工作正常并将日志发送到第 3 方日志记录服务,但不会写入控制台:(
<?xml version="1.0" encoding="UTF-8"?>
<configuration >
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%highlight([%level]) - [%date] - [%logger] %msg%n</pattern>
</encoder>
</appender>
<appender name="ROLLBAR" class="com.rollbar.logback.RollbarAppender">
<accessToken>VERY_SECRET_TOKEN</accessToken>
<encoder>
<pattern>%highlight([%level]) - [%date] - [%logger] %msg%n</pattern>
</encoder>
</appender>
<logger name="akka" level="INFO" additivity="false">
<appender-ref ref="CONSOLE" />
</logger>
<logger name="slick" level="ERROR"/>
<root level="ERROR">
<appender-ref ref="ROLLBAR" />
</root>
</configuration>
所以我很困惑。如何使 logback 以这种方式工作:
INFO 级别事件写入控制台
错误级别事件写入控制台 + ROLLBAR
最佳答案
解决方案非常简单。 <filter>
标签解决了这个问题:它的日志记录级别覆盖 <root>
的日志记录级别标签
<appender name="RollBar" class="com.rollbar.logback.RollbarAppender">
<accessToken> VERY_SECRET_TOKEN </accessToken>
<environment>PROD</environment>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
...
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="RollBar" />
</root>
关于java - Logback 不写入第 3 方日志服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51313269/