[logback-user] Handling log events happening before configuration is ready?

Ralph Goers rgoers at apache.org
Sat Sep 8 19:18:52 CEST 2012


It sounds to me like what you want is to use the SiftingAppender using a SystemPropertyDiscriminator.

Ralph

On Sep 7, 2012, at 1:56 AM, Thorbjørn Ravn Andersen wrote:

> Hi Ceki.
> 
> Thank you for your prompt reply and a very interesting suggestion.
> 
> It sounds to me that what you suggest - which essentially tells logback to
> delay processing completely - require that our application will have to
> leave the "use only SLF4J" paradigm that we have been very satisfied with,
> and instead know the most intimates of intimate about not only logback but
> also our logging configuration (which is by definition here unknown to the
> programmer as it is the responsibility of the deployer - also we usually use
> the Simple implementation while developing thanks to the flexibility of
> Maven).  I am not sure I like going there.
> 
> Perhaps this is a bit overkill for our current needs?   A slightly smarter
> FileAppender might be better for us, perhaps?
> 
> I'll ponder some more, and have a look at the code - perhaps a devious
> workaround shows - has happended before :)
> 
> Thanks
> 
> /Thorbjørn
> 
> 
> -----Original Message-----
> From: logback-user-bounces at qos.ch [mailto:logback-user-bounces at qos.ch] On
> Behalf Of ceki
> Sent: 5. september 2012 15:34
> To: logback users list
> Subject: Re: [logback-user] Handling log events happening before
> configuration is ready?
> 
> 
> 
> On 05.09.2012 14:29, Thorbjørn Ravn Andersen wrote:
>> Very rapidly - usually within the first second.  We are still in the 
>> initialization phase of our application.
> 
> In that case, you could declare a buffer in logback.xml, buffer the events
> until all the initialization information is available, and then configure
> logback via another configuration file by invoking Joran directly as
> explained at
> 
>   http://logback.qos.ch/manual/configuration.html#joranDirectly
> 
> Once logback is configured a second time (and for good), you can replay the
> events contained in the buffer.
> 
> The initial Logback.xml could be as small as:
> 
> <configure>
>   <appender name="LIST" class="ch.qos.logback.core.read.ListAppender"/>
>   <root level="DEBUG">
>     <appender-ref ref="LIST"/>
>   </root>
> </configure>
> 
> 
> To obtain the appender named LIST:
> 
>   import ch.qos.logback.classic.Logger;
>   LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
>   Logger root = lc.getLogger(Logger.ROOT_NAME);
>   ListAppender listAppender = (ListAppender ) root.getAppender("LIST");
>   List<ILoggingEvent> eList = (List<ILoggingEvent>) listAppender.list;
> 
> 
> Unfortunately, logback-classic does not offer an API for replaying events.
> If however, you *know* that you have appenders A and B configured, you could
> write:
> 
>   Appender appenderA = root.getAppender("A")
>   Appender appenderB = root.getAppender("B")
> 
>   for(ILogdingEvent event: eList) {
>      appenderA.doAppend(event);
>      appenderB.doAppend(event);
>   }
> 
> 
> The main problem with this approach is that it requires the names of the
> appenders in your second logback config file to be hardcoded.
> However, there are ways to get around this limitation.
> 
> --
> Ceki
> http://tinyurl.com/proLogback
> 
>> 
>> -----Original Message-----
>> From: logback-user-bounces at qos.ch [mailto:logback-user-bounces at qos.ch] 
>> On Behalf Of ceki
>> Sent: 4. september 2012 14:50
>> To: logback users list
>> Subject: Re: [logback-user] Handling log events happening before 
>> configuration is ready?
>> 
>> How much time are we talking about between logback initialization and 
>> the time where the value of the property is known?
>> 
>> On 04.09.2012 14:38, Thorbjørn Ravn Andersen wrote:
>>> We have  done plain old “just log to a new file for the duration of 
>>> the program – delete old logs daily” for several years now and found 
>>> it works well for us.
>>> 
>>> Now I have a rather tricky situation where part of the file name to 
>>> be used by (a subclass of) FileAppender needs to be supplied by my 
>>> code, but the initialization phase of the application contains log 
>>> statements triggering the initialization of logback _/before/_ the 
>>> property referred to by the FileAppender name string is set causing 
>>> the log file to have an incorrect name.
>>> 
>>> Basically what I have found to be the behavior I want is for logback 
>>> to await opening the file and write data before I say it can.
>>> 
>>> Question is how I can do this within the limits of logback.  Can I 
>>> tell logback to just buffer events in memory (this will only be for a 
>>> few seconds, and memory will most likely not be an issue) – some kind 
>>> of valve?  Can I tell FileAppender to write to a temporary file and 
>>> rename it whenever the name is ready (perhaps using some of the 
>>> Policies from RollingFileAppender)?
>>> 
>>> Any suggestions on how to handle this?
>>> 
>>> Note:  As we restart our application daily we do not need 
>>> RollingFileAppender for our general logging – instead we have 
>>> subclassed FileAppender to remove “older than X days” files from the 
>>> target folder.  This has proven to work very well for our scenario.
>>> 
>>> Thanks
>>> 
>>> /Thorbjørn
>>> 
> 
> _______________________________________________
> Logback-user mailing list
> Logback-user at qos.ch
> http://mailman.qos.ch/mailman/listinfo/logback-user
> 
> _______________________________________________
> 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