Logback - 两个不同级别的相同记录器

Logback - same logger for two different levels

我已按以下方式配置我的 logback-spring.xml 文件:

    <logger name="com.mypack" level="info" additivity="false">
        <appender-ref ref="CLOUD" />
        <appender-ref ref="RollingFile" />
        <appender-ref ref="STDOUT" />
    </logger>
     
    <logger name="TrackingLog" level="info" additivity="false">
        <appender-ref ref="CLOUD" />
        <appender-ref ref="RollingFile" />
        <appender-ref ref="STDOUT" />
    </logger>
     
     
    <logger name="PostBackLog" level="info" additivity="false">
        <appender-ref ref="CLOUD" />
        <appender-ref ref="RollingFile" />
        <appender-ref ref="STDOUT" />
    </logger>
     
    <root level="error" includeLocation="true">
       <appender-ref ref="CLOUD" />
       <appender-ref ref="RollingFile" />
       <appender-ref ref="STDOUT" />
    </root>

我还希望 com.mypack 的级别“trace”与“info”的行为方式相同。到目前为止,我没有取得任何成功。我需要类似

的东西
    <logger name="com.mypack" level="info" additivity="false">
        <appender-ref ref="CLOUD" />
        <appender-ref ref="RollingFile" />
        <appender-ref ref="STDOUT" />
    </logger>
     
    <logger name="com.mypack" level="trace" additivity="false">
        <appender-ref ref="CLOUD" />
        <appender-ref ref="RollingFile" />
        <appender-ref ref="STDOUT" />
    </logger>

    <logger name="TrackingLog" level="info" additivity="false">
        <appender-ref ref="CLOUD" />
        <appender-ref ref="RollingFile" />
        <appender-ref ref="STDOUT" />
    </logger>
     
     
    <logger name="PostBackLog" level="info" additivity="false">
        <appender-ref ref="CLOUD" />
        <appender-ref ref="RollingFile" />
        <appender-ref ref="STDOUT" />
    </logger>
     
    <root level="error" includeLocation="true">
       <appender-ref ref="CLOUD" />
       <appender-ref ref="RollingFile" />
       <appender-ref ref="STDOUT" />
    </root>

感谢您的帮助。

使用 if 条件设置不同的日志级别。

首先,您需要 Janino 库来进行条件记录。参考 janino 并将其添加到您的 pom.xml

<dependency>
  <groupId>org.codehaus.janino</groupId>
  <artifactId>janino</artifactId>
  <version>3.1.6</version>
 </dependency>

其二,添加环境变量设置不同的日志级别。

例如

your_key=your_value

最后,添加if条件

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.out</target>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{100} - %msg%n</pattern>
        </encoder>
    </appender>
    
    <!-- if exists your key in environment variable -->
    <if condition='isNull("your_key")'>
        <!-- if your key exists -->
        <then>
            <logger name="com.mypack" level='debug'>
                <appender-ref ref="STDOUT" />
            </logger>
        </then>
        <!-- if your key doesn't exist -->
        <else>
            <logger name="com.mypack" level='info'>
                <appender-ref ref="STDOUT" />
            </logger>
        </else>
    </if>
</configuration>