[logback-user] Switch logging to different files at runtime

David Roussel nabble at diroussel.xsmail.com
Tue May 20 21:40:14 CEST 2014


You can use sifting appender to change log file name dynamically based on values in the MDC. 

For instance you could have one log file per user. Or one line file per web session. 

David

> On 20 May 2014, at 20:29, lee json <jsonlee.ft at gmail.com> wrote:
> 
> I test to run a sample logging message to a file. But I am wondering
> how can I switch logging to different files at runtime? For example,
> initially the message is logged to <log_dir>/<file_a>.log. Later on I
> would like the application to log message to <log_dir>/<file_b>.log.
> Is it doable with logback lib?
> 
> I want to log message to logs/<parent_key_id>/<key_id>...log. Is
> RollingPolicy configured to start up once? How can I change logging to
> another log file such as logs/<parent_key_id1>/<key_id1>...log when
> certain condition is met?
> 
> Thanks
> 
> The current setting:
> logback.xml
> <?xml version="1.0" encoding="UTF-8"?>
> <configuration scan="false" debug="false">
>  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
>    <rollingPolicy class="sample.logging.MyRollingPolicy">
>      <FileNamePattern>%keyId_%d.log.gz</FileNamePattern>
>      <MaxHistory>60</MaxHistory>
>    </rollingPolicy>
>    <layout class="ch.qos.logback.classic.PatternLayout">
>      <!-- http://logback.qos.ch/manual/layouts.html#PatternLayout -->
>      <Pattern>[%4p] [%d{ISO8601}] [%t] %c{1}: %m%n</Pattern>
>    </layout>
>  </appender>
>  <root level="INFO">
>    <appender-ref ref="FILE"/>
>  </root>
> </configuration>
> 
> MyRolling.scala
> package sample.logging
> 
> import java.io.File
> 
> import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
> 
> class MyRollingPolicy[E] extends TimeBasedRollingPolicy[E] {
>  override def setFileNamePattern(fnp: String) {
>    try{
>      println("fnp passed in: "+fnp)
>      val fnp1 = fnp.replace("%keyId", "k_1_3")
>      println("[after replaced] fnp1 now is "+fnp1)
> 
>      val f = new File("logs/" + "parent_key_id");
>      // Logback will create any necessary parent paths.
>      super.setFileNamePattern(f.getAbsolutePath() + "/" + fnp1);
>    } catch {
>      case e: Exception => {
>        println("something go wrong..."+e)
>        throw new RuntimeException(e);
>      }
>    }
>  }
> }
> _______________________________________________
> Logback-user mailing list
> Logback-user at qos.ch
> http://mailman.qos.ch/mailman/listinfo/logback-user


More information about the Logback-user mailing list