Reputation: 53
Can someone help me to create a logback-spring.xml
file for this scenario:
startup log and application log should be logged to 2 separate files, which are updated continiously. How would the file appenders look in logback-spring.xml
?
Upvotes: 0
Views: 1567
Reputation: 53
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<appender name="ROLLING-FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>
some pattern
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--daily rollover -->
<fileNamePattern>some pattern</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="STARTUP"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>
${CONSOLE_LOG_PATTERN}
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>some pattern</fileNamePattern>
</rollingPolicy>
</appender>
<logger name="SOME PACKAGE" level="INFO" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ROLLING-FILE"/>
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="STARTUP"/>
</root>
</configuration>
Upvotes: 0
Reputation: 2220
I managed to achieve with this approach:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="APP_FILE" class="ch.qos.logback.core.FileAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>return logger.equals("<YOUR FULL CLASS NAME FOR APPLICATION CLASS>");</expression>
</evaluator>
<OnMismatch>ACCEPT</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
<file>app.log</file>
<append>true</append>
<!-- set immediateFlush to false for much higher logging throughput -->
<immediateFlush>true</immediateFlush>
<encoder>
<pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger{36}.%M - %msg%n</pattern>
</encoder>
</appender>
<appender name="STARTUP_FILE" class="ch.qos.logback.core.FileAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>return logger.equals("<YOUR FULL CLASS NAME FOR APPLICATION CLASS>");</expression>
</evaluator>
<OnMismatch>DENY</OnMismatch>
<OnMatch>ACCEPT</OnMatch>
</filter>
<file>startup.log</file>
<append>true</append>
<!-- set immediateFlush to false for much higher logging throughput -->
<immediateFlush>true</immediateFlush>
<encoder>
<pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger{36}.%M - %msg%n</pattern>
</encoder>
</appender>
<logger name="<YOUR PACKAGE HERE>" level="debug">
<appender-ref ref="APP_FILE" />
</logger>
<root level="info">
<appender-ref ref="STARTUP_FILE" />
</root>
Just replacing the :
<YOUR FULL CLASS NAME FOR APPLICATION CLASS>
<YOUR PACKAGE HERE>
Example:
com.bhrother.exampleapp.Application.class
com.bhrother.exampleapp
Here, we are filtering the logs by loggerName to know where each log should go.
Upvotes: 1