
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@qos.ch> wrote:
From: Ceki Gulcu <listid@qos.ch> Subject: Re: [logback-user] Setting log filename during runtime To: "logback users list" <logback-user@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@yahoo.com Subject: Re: [logback-user] Setting log filename during runtime To: "logback users list" logback-user@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> ...
-- Ceki Gülcü Logback: The reliable, generic, fast and flexible logging framework for Java. http://logback.qos.ch