java - Logback 不写入第 3 方日志服务

标签 java scala logging logback slf4j

我正在设置更复杂的日志记录,然后是简单的控制台输出。 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/

相关文章:

java - 如何限制用户只能输入一个整数?

java - Jenkins 中的用户权限

Scala 通用上限

java - 用Java解析文本文件的良好实践

c# - 自定义跟踪输出

java - 总的 JVM 在 Hadoop 集群上运行? Hadoop 中的 JVM 生命周期

java - 关闭连接后使用结果集数据

Scala Cat 使用 Ior 累积错误和成功

scala - 制作文件夹/文件并在Scala中写入它们?

elasticsearch - 为什么logstash停止处理日志