Reputation: 28189
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?
Upvotes: 15
Views: 24436
Reputation: 17048
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
.
Upvotes: 27
Reputation: 91
I don't understand why wrong answer here is upvoted. The guy wants ONLY error messages in his file.
Here is the correct answer:
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
Reference: https://logback.qos.ch/manual/filters.html#levelFilter
Upvotes: 8
Reputation: 476
Refer below code:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
Upvotes: 2