SLF4J-Logback:基于日志级别的多模式

SLF4J-Logback : Multiple Pattern based on Log Level

使用 Logback 是因为我们需要一些 log4j 没有提供的 Appender。

要求: 对于日志级别错误,我们希望使用自定义模式,它将根据堆栈跟踪添加信息。

对于所有其他日志级别,它应该使用简单模式。

所有的日志输出应该放在同一个文件中。

尝试了以下操作: 创建了两个 Appender,一个用于错误日志级别,另一个用于其他日志级别。 当两个 Appender 使用相同的目标文件时,错误日志不会写入文件。 当两个附加程序使用不同的目标文件时,将创建两个文件,一个具有错误日志级别,另一个具有所有其他日志级别

使用 log4j2 找到了一些指示,但使用 logback 到目前为止找不到解决方案。

有人可以建议一些方法吗

在 appender 配置中,将 prudent 设置为 true。这将允许多个 appender 写入同一个文件。

爆破 Prasanth Nair 的回答。在 logback https://logback.qos.ch/manual/appenders.html 的手册中你可以找到

In prudent mode, FileAppender will safely write to the specified file, even in the presence of other FileAppender instances running in different JVMs, potentially running on different hosts. The default value for prudent mode is false.

这是一个示例配置:

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- Support multiple-JVM writing to the same log file -->
    <prudent>true</prudent>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory> 
      <totalSizeCap>3GB</totalSizeCap>
    </rollingPolicy>

    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender> 

  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>
</configuration>