[logback-user] Setting log filename during runtime

Jenny jenny_uy81 at yahoo.com
Fri Nov 21 03:56:00 CET 2008


Hi Ceki,

Its working now. I just replaced the "%" with "$" in the variable substitution :)

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
   <file>${logFileName}</file>
</appender>

thanks,
Jenny


--- On Fri, 11/21/08, Jenny <jenny_uy81 at yahoo.com> wrote:

> From: Jenny <jenny_uy81 at yahoo.com>
> Subject: Re: [logback-user] Setting log filename during runtime
> To: "logback users list" <logback-user at qos.ch>
> Date: Friday, November 21, 2008, 7:07 AM
> Hi Ceki,
> 
> I tried your suggestion almost exactly but it didn't
> work for me. I put that code in my StartupServlet.init().
> The only part I changed is loggerContext.reset() to
> loggerContext.shutdownAndReset(). I see this in the system
> out.
> 
> 14:46:51,863 |-INFO in
> ch.qos.logback.core.rolling.RollingFileAppender[FILE] -
> Active log file name: %{logFileName}
> 
> Any idea why it didn't work for me?
> 
> Jenny
> 
> 
> --- On Fri, 11/14/08, Ceki Gulcu <listid at qos.ch>
> wrote:
> 
> > From: Ceki Gulcu <listid at qos.ch>
> > Subject: Re: [logback-user] Setting log filename
> during runtime
> > To: "logback users list"
> <logback-user at qos.ch>
> > Date: Friday, November 14, 2008, 4:59 PM
> > Hello Jenny,
> > 
> > You can dynamically add properties for variable
> > substitution to a logger 
> > context. Here is how:
> > 
> >   LoggerContext loggerContext = (LoggerContext)
> >           LoggerFactory.getILoggerFactory();
> >   JoranConfigurator jc = new JoranConfigurator();
> >   jc.setContext(loggerContext);
> >   loggerContext.reset();  // throw away default
> > configuration
> > 
> >   // the next line is the whole point of the exercise
> >   loggerContext.putProperty("logFileName",
> > valueObtainedFromLDAP);
> >   try {
> >    
> jc.doConfigure("path/to/a/configfile.xml");
> >   } catch (JoranException je) {
> >     je.printStackTrace();
> >   }
> >   StatusPrinter.printIfErrorsOccured(loggerContext);
> > 
> > 
> > And in configfile.xml mentioned above, you would have
> > 
> > <appender name="FILE"
> >
> class="ch.qos.logback.core.rolling.RollingFileAppender">
> >    <file>%{logFileName}</file>
> >    ...
> > </appender>
> > 
> > HTH,
> > 
> > Jenny wrote:
> > > Hi Ceki,
> > > 
> > > Variable substition wouldn't accomplish what
> I
> > want to achieve... or would it? :)
> > > 
> > > My goal is to set the log filename in a dynamic
> way -
> > retrieve it from an LDAP configuration. I don't
> want it
> > hardcoded in the logback.xml.
> > > 
> > > My understanding is that variable substition only
> > works if the variable comes from an external
> properties file
> > or set in system property.
> > > 
> > > thanks,
> > > Jenny
> > > 
> > > 
> > > --- On Thu, 11/13/08, Ceki Gulcu
> <listid at qos.ch>
> > wrote:
> > > 
> > >> From: Ceki Gulcu <listid at qos.ch>
> > >> Subject: Re: [logback-user] Setting log
> filename
> > during runtime
> > >> To: "logback users list"
> > <logback-user at qos.ch>
> > >> Date: Thursday, November 13, 2008, 4:11 PM
> > >> Hello Jenny,
> > >>
> > >> Why are you setting the passing value of
> > >> "logFileName" MDC? Just set it as a
> 
> > >> variable, see
> > http://logback.qos.ch/manual/joran.html and
> > >> search for "Variable 
> > >> substitution".
> > >>
> > >> HTH,
> > >>
> > >> Jenny wrote:
> > >>> Hi, I'm not sure if this is the
> preferred
> > way or
> > >> best practice... but what I did was extend
> the
> > >> RollingFileAppender and override the
> getFile()
> > method.
> > >>>  
> > >>> and this getFile() method retrieves /
> > generates the
> > >> log file name.
> > >>>  
> > >>> please let me know if you have better
> > solutions.
> > >>>  
> > >>> thanks,
> > >>> Jenny
> > >>>  
> > >>>
> =============================================
> > >>> From: Jenny jenny_uy81 at yahoo.com
> > >>> Subject: Re: [logback-user] Setting log
> > filename
> > >> during runtime
> > >>> To: "logback users list"
> > logback-user at qos.ch
> > >>>  
> > >>> Hello,
> > >>>
> > >>> How can i set the log filename set during
> the
> > init()
> > >> of my StartupServlet.
> > >>> I tried using MDC but it's not
> working for
> > me.
> > >>>
> > >>> What happens is the file is not created.
> > Instead a
> > >> file with name "%exp{logFileName}"
> \
> > >>> is created on my web server's bin
> > directory.
> > >>>
> > >>> In my StartupServlet, I have this init
> method
> > that
> > >> calls MDC.put().
> > >>> public void init() throws
> ServletException {
> > >>> MDC.put("logFileName",
> > >>
> > "c:\\testlogs\\test.log");
> > >>> Logger log =
> > >>
> LoggerFactory.getLogger(StartupServlet.class); 
> > >>> log.info("This should be
> logged");
> > >>> }
> > >>>
> > >>> In my logback.xml, I have a MDC.get().
> > >>>
> > >>> <appender name="FILE"
> > >>
> >
> class="ch.qos.logback.core.rolling.RollingFileAppender">
> > >>> <append>true</append>
> > >>> <expression
> > >>
> >
> name="logFileName">MDC.get("logFileName")</expression>
> > >>>
> <file>%exp{logFileName}</file>



      


More information about the Logback-user mailing list