Saturday, 17 August 2013

How can I log to a different file depending on its name

How can I log to a different file depending on its name

I want to be able to do:
// A logger.
private static final Logger log = LoggerFactory.getLogger(Foo.class);
// Stats logger.
private static final Logger stats = LoggerFactory.getLogger("Stats");
Whenever I log to stats (stats.info(...)) I want the log entries to go to
a file called Stats.log. Logging to log should act normal.
I have (probably wrongly) got the following in Logback.xml:
<configuration>
<appender name="STATS" class="ch.qos.logback.core.FileAppender">
<file>Stats.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<FileNamePattern>Stats.%d{yyyy-MM-dd}.%i.log.zip</FileNamePattern>
<!-- or whenever the file size reaches 1MB -->
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- Check on startup too. -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>%date %msg</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>Log.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<FileNamePattern>Log.%d{yyyy-MM-dd}.%i.log.zip</FileNamePattern>
<!-- or whenever the file size reaches 1MB -->
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- Check on startup too. -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line]
%msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%level %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
<appender-ref ref="STATS" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
I don't seem to be able to find anything that tells me how to select an
appender based on the logger name. There's plenty for choosing based on
the log level.

No comments:

Post a Comment