After an extra look at log4j source I wonder if I've found some kind of 
solution:
Logger contains the following signature:
log.debug(Object message) 

Here this is an "Ojbject" and not a "String".

If I create some class in charge of building the debug message only when its 
toString() method is called and I call log.debug() with some instance of that 
class, then message creation is payed only when log4j actually builds the 
message. And I believe this to append after filtering if filtering allowed the 
message to be logged. If I'm correct, this would be a neat solution.

What do you guys think about it?

>-----Original Message-----
>From: ext James Stauffer [mailto:[EMAIL PROTECTED] 
>Sent: Wednesday, July 19, 2006 5:44 PM
>To: Log4J Users List
>Subject: Re: High performance filters
>
>It would really only work with 1 extra criteria.
>I don't know the impact of many loggers.
>
>On 7/19/06, [EMAIL PROTECTED] 
><[EMAIL PROTECTED]> wrote:
>> That's an interresting work arround.
>> Still that is tedious when several criterias are needed.
>>
>> Since we are talking about a server, that would create a 
>huge number of loggers. Do you have any idea about performance impact?
>>
>> >-----Original Message-----
>> >From: ext James Stauffer [mailto:[EMAIL PROTECTED]
>> >Sent: Wednesday, July 19, 2006 5:22 PM
>> >To: Log4J Users List
>> >Subject: Re: High performance filters
>> >
>> >One option would be to include to the IP address in the logger name.
>> >Logger log = Logger.getLogger(getClass().getName() + "." + 
>> >request.getSourceAddress());
>> >
>> >That would create many more loggers but would allow
>> >log.isDebugEnabled() to work correctly.
>> >
>> >On 7/19/06, [EMAIL PROTECTED] 
>> ><[EMAIL PROTECTED]> wrote:
>> >> I'm not sure your proposal solves my problem.
>> >> I'm sorry if my question was not clear enough. Let me try
>> >another way:
>> >>
>> >> Considering the following code snippet
>> >>
>> >> // the following method is called-back hundred of time // 
>per second.
>> >> public void process(Request request, Response response) {
>> >>     NDC.push("source-ip=" + request.getSourceAddress());
>> >>     if (log.isDebugEnabled())
>> >>     {
>> >>         log.debug(buildDebugMessage(request));
>> >>     }
>> >>     // process request and send response ...
>> >>     NDCP.pop();
>> >> }
>> >>
>> >> I need that log.debug(buildDebugMessage(request)) is called
>> >only if the logger is in debug mode AND the source-ip 
>within the NDC 
>> >is 192.168.0.12 (this source cause some trouble to the 
>server in this 
>> >example), so that it would be possible to turn live servers 
>in debug 
>> >mode for some (problematic) context and investigate directly in 
>> >production without killing performances.
>> >>
>> >> The NDC+Filtering method does not help that much here. It
>> >does prevent messages from beeing wrote if they don't match the 
>> >expected context (source IP 192.168.0.12 in my example), 
>but it does 
>> >not prevent the debug message from being built (the 
>> >buildDebugMessage(request) call) which is still quite 
>expensive (and 
>> >useless in this context).
>> >>
>> >> I hope this is clear enough :)
>> >>
>> >> Thanks a lot for your time!
>> >> Vincent.
>> >>
>> >>
>> >>
>> >>
>> >> >-----Original Message-----
>> >> >From: ext Javier Gonzalez [mailto:[EMAIL PROTECTED]
>> >> >Sent: Wednesday, July 19, 2006 3:44 PM
>> >> >To: Log4J Users List
>> >> >Subject: Re: High performance filters
>> >> >
>> >> >Create separate Loggers for the debug requests, and leave
>> >only those
>> >> >loggers at debug level. Then prepend log.debug() calls with 
>> >> >if(log.isDebugEnabled()), so that the debug messages 
>will only be 
>> >> >created if the particular logger is debug enabled.
>> >> >
>> >> >(I'm not sure I understood your question correctly, though)
>> >> >
>> >> >On 7/19/06, [EMAIL PROTECTED] 
>> >> ><[EMAIL PROTECTED]> wrote:
>> >> >> Hi all,
>> >> >>
>> >> >> I'm building some kind of server and I use log4j for logging.
>> >> >> For troubleshooting issue I whant to be able to debug some few 
>> >> >> requests only (based on matching criterias) so that it is
>> >> >possible to
>> >> >> debug live servers without killing performances.
>> >> >>
>> >> >> I managed to use NDC and filters to do that and it does
>> >> >well. However,
>> >> >> filters are actually applied *after* log messages. Then using
>> >> >> NDC+filters solves only half the issue since the debug
>> >messages are
>> >> >> still created (even if not logged to disk). And because this
>> >> >is quite
>> >> >> CPU and RAM intensive it would drop the performances below
>> >> >acceptable
>> >> >> production-level.
>> >> >>
>> >> >> Do you know if there is any way to use a filter-like 
>mechanis at
>> >> >> log.isDebugEnabled() level for example? This way it would be
>> >> >possible
>> >> >> to not even build debug messages when the NDC does not match 
>> >> >> criterias, thus saving a lot CPU and RAM usage and allowing
>> >> >debugging live servers.
>> >> >>
>> >> >> Thanks all,
>> >> >> Vincent Bourdaraud.
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >> >--
>> >> >Javier González Nicolini
>> >> >
>> >>
>> 
>>>--------------------------------------------------------------------
>> >>-
>> >> >To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >> >For additional commands, e-mail: 
>> >> >[EMAIL PROTECTED]
>> >> >
>> >> >
>> >>
>> >> 
>-------------------------------------------------------------------
>> >> -- To unsubscribe, e-mail: 
>> >> [EMAIL PROTECTED]
>> >> For additional commands, e-mail: 
>[EMAIL PROTECTED]
>> >>
>> >>
>> >
>> >
>> >--
>> >James Stauffer
>> >Are you good? Take the test at http://www.livingwaters.com/good/
>> >
>> 
>>---------------------------------------------------------------------
>> >To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >For additional commands, e-mail: [EMAIL PROTECTED]
>> >
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
>--
>James Stauffer
>Are you good? Take the test at http://www.livingwaters.com/good/
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to