Daniel Braverman
Daniel Braverman

Reputation: 3

Logback - same logger for two different levels

I have configuring my logback-spring.xml file the following way:

    <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>

I want also that level "trace" for com.mypack will behave the same way as "info". So far I didn't have any success with it. I need something like

    <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>

appreciate for any help.

Upvotes: 0

Views: 288

Answers (1)

bittap
bittap

Reputation: 548

Use if conditions to set different logging level.

The first, You need to Janino library for conditional logging. Reference janino and add this in your pom.xml

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

The second, Add environment variable to set to different logging level.

For example

your_key=your_value

Finally, Add if conditions

<?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>

Upvotes: 1

Related Questions