[logback-user] Sequence number

ceki ceki at qos.ch
Wed Jul 3 00:20:20 CEST 2013


Indeed, Integer.MAX_VALUE is 2^31. On a recent PC, an application doing 
nothing but logging, can log around 100'000 messages per second. The 
sequence number of such an application will reach 2^31 after about two 
hours of continuous logging (or approx. 200 GB of logs).

As David mentioned atomic long is probably a better alternative.

import java.util.concurrent.atomic.AtomicLong;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.pattern.ClassicConverter

public class LocalSequenceNumberConverter extends ClassicConverter {

   AtomicLong sequenceNumber = new AtomicLong(0);

   @Override
   public String convert(ILoggingEvent event) {
     return Long.toString(sequenceNumber.getAndIncrement());
   }
}

A volatile long is not guaranteed to work properly because incrementing 
a long is not atomic whereas incrementing a int is.


On 03.07.2013 00:01, David Roussel wrote:
> Or use AtomicLong.
>
> David
>
> On 2 Jul 2013, at 22:50, ceki <ceki at qos.ch> wrote:
>
>>
>> In your custom converter, declare a sequenceNumber as follows:
>>
>> *volatile* int sequenceNumber = 0;
>>
>> increment sequenceNumber for each new event:
>>
>> sequenceNumber++;
>>
>> That's it.
>>
>> On 02.07.2013 23:21, Felipe wrote:
>>> Hi everyone:
>>>
>>> I'm writing to all of you because I want to display a sequence number
>>> for each event. I've done some research regarding this and I know for
>>> sure that LogBack is not able to natively handle this as Log4j2 does
>>> with %sn, or as JUL partially does with getSequenceNumber() (I won't be
>>> changing LogBack because of this, anyway).
>>>
>>> I know for sure LogBack is lacking this functionality because of this
>>> issue on JIRA:
>>>
>>> http://jira.qos.ch/browse/LOGBACK-546
>>>
>>> That issue is a four years old boy now.
>>>
>>> I found a link on Stack Overflow
>>> (http://stackoverflow.com/questions/11162951/line-numbers-with-logback)
>>> which lead me to the following link:
>>>
>>> http://logback.qos.ch/manual/layouts.html#customConversionSpecifier
>>>
>>> I tried a static number but it was sred across threads so it didn't
>>> work that well. I also thought of ThreadLocal but I read a story which
>>> freaked me out:
>>>
>>> http://niklasschlimm.blogspot.com/2012/04/threading-stories-threadlocal-in-web.html
>>>
>>> Does anyone know of a good way to achieve sequentials?
>>>
>>> Best regards and thanks in advance.
>>>
>>> --
>>> Felipe
>>>
>>>


-- 
Ceki
65% of statistics are made up on the spot


More information about the Logback-user mailing list