Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 348
Mister Smith Avatar asked Oct 30 '13 17:10

Mister Smith


1 Answers

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.

like image 110
steffen Avatar answered Sep 22 '22 01:09

steffen