Search code examples
javaloggingslf4jlogback

Logback: how to log only errors to file


I've been reading the logback manual for 2 hours and still can't figure how to do what I need.

It is as simple as the title says: I want to log only the errors to a file, and the other levels (including ERROR) to console.

This is the root section of my logcat.xml file:

    <root level="TRACE" >
        <appender-ref ref="CONSOLE_APPENDER" />
        <appender-ref ref="FILE_APPENDER" />
    </root>

The problem with this configuration is that it logs every level >= TRACE to both appenders.

I could let the root with only console, and define a file logger:

    <logger name='file_logger' level='ERROR' >
        <appender-ref ref="FILE_APPENDER" />
    </logger>

But then I'd have to call the normal logger like this:

LoggerFactory.getLogger(ClientClass.class);

And the file logger like this:

LoggerFactory.getLogger("file_logger");

I don't wan't to choose the logger for each class. I just want to get the root logger from the factory using the class as parameter, and have it do the correct thing depending on the level.

Is this possible?


Solution

  • Put this into your file appender definition:

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
    </filter>
    

    The ThresholdFilter is in logback-classic.jar.