How can I set up different appenders for the different methods of the same class in logback?

33 Views Asked by At

I tried to use appenders like that:

<appender name="Appender1" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>

<appender name="Appender2" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>

and I adde the filtering to them like

<configuration>
    <appender name="Appender1" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.MarkerFilter">
            <marker>METHOD1</marker>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="Appender2" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.MarkerFilter">
            <marker>METHOD2</marker>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.yourpackage.method1" level="INFO" additivity="false">
        <appender-ref ref="Appender1" />
    </logger>

    <logger name="com.yourpackage.method2" level="INFO" additivity="false">
        <appender-ref ref="Appender2" />
    </logger>
</configuration>

and in the code I have different Markers:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;

public class YourClass {
    private static final Logger logger = LoggerFactory.getLogger(YourClass.class);
    private static final Marker METHOD1_MARKER = MarkerFactory.getMarker("METHOD1");
    private static final Marker METHOD2_MARKER = MarkerFactory.getMarker("METHOD2");

    public void method1() {
        logger.info(METHOD1_MARKER, "This log statement is for method1");
    }

    public void method2() {
        logger.info(METHOD2_MARKER, "This log statement is for method2");
    }
}

and when I use

appenders I see no log entries in both appenders. And when I use

<logger name="com.yourpackage." level="INFO" additivity="false">
    <appender-ref ref="Appender1" />
</logger>

<logger name="com.yourpackage." level="INFO" additivity="false">
    <appender-ref ref="Appender2" />
</logger>

I see no entries in both. How to configure them properly to see the different methiods log entries into the different logback appenders?

0

There are 0 best solutions below