> On Mar 30, 2017, at 21:51, Pietro Galassi <pietro.gala...@gmail.com> wrote:
> 
> Thanks a lot!
> 
> So:
> 
> - for class name better to use %c with the LogManager.getLogger(this.class)
> instead of the calculation i do ?
Yes. 
> 
> - for method name avoid %M and use new Throwable().getStackTrace instead
> Thread.currentThread().getStackTrace() to get better performance ?
I don't think you understand what I am trying to say. 

If you want good performance you need to give up on the idea of printing 
location information. 

Not with %M, not with any custom logic, because *all* of these are slow. 

Why would you want location information? If you want to be able to look at a 
log message and understand where in the code it came from, then simply use 
unambiguous log messages in your code. The %c will tell you the class name so 
you know which class to look at. Then just search for the log message string in 
that class. 

> 
> 
> Regards
> 
>> On Thu, Mar 30, 2017 at 1:49 PM, Remko Popma <remko.po...@gmail.com> wrote:
>> 
>> 
>> 
>> Sent from my iPhone
>> 
>>> On Mar 30, 2017, at 16:24, Pietro Galassi <pietro.gala...@gmail.com>
>> wrote:
>>> 
>>> So,
>>> 
>>> using such code like this:
>>> 
>>> LogManager.getLogger(this.class); will let the code be fast ?
>> Yes.
>>> 
>>> 
>>> and it's faster than the code i published ?
>> Yes. The point of my answer was that you want to *avoid calculating
>> location*. Just have log messages that clearly say "the result of step X in
>> calculation Y is Z" and you don't need class name, method name or line
>> number in your log.
>>> 
>>> 
>>> Also why  new Throwable().getStackTrace is faster than
>>> Thread.currentThread().getStackTrace(). ?
>> I think we concluded that from benchmarks results. We don't know why they
>> are different. But anyway, the key to performance is avoiding all attempts
>> to calculate location.
>> 
>>> Does the new in Throwable can give performance issue ?
>> Yes. Avoid if you want good performance.
>>> 
>>> 
>>> Regards.
>>> 
>>> 
>>>> On Wed, Mar 29, 2017 at 5:49 PM, Remko Popma <remko.po...@gmail.com>
>> wrote:
>>>> 
>>>> Pietro,
>>>> 
>>>> The performance impact of logging location information is massive.
>>>> See
>>>> https://logging.apache.org/log4j/2.x/performance.html#
>>>> asyncLoggingWithLocation
>>>> 
>>>> You can increase logging speed by ~80x by not logging location
>> information.
>>>> 
>>>> If you follow the conventions that each class has its own logger (and
>> the
>>>> logger name is the class that it is for), then %c or %logger in the
>> pattern
>>>> layout will tell you the name of the class. Then all that remains is
>> make
>>>> your log messages informative enough that you don't need line numbers to
>>>> disambiguate them.
>>>> 
>>>> Remko
>>>> 
>>>> 
>>>> On Thu, Mar 30, 2017 at 12:42 AM, Ralph Goers <
>> ralph.go...@dslextreme.com>
>>>> wrote:
>>>> 
>>>>> What Java version are you using?  Why do you think your code is going
>> to
>>>>> perform better than what Log4j is doing?
>>>>> 
>>>>> The fastest way to get the caller information is to use Java 9’s
>>>>> StackWalker.getCallerClass() method which only takes a couple of
>>>>> milliseconds. But doing that might actually make the application
>> perform
>>>>> worse as you would potentially be capturing that information even for
>>>>> events that are not going to be logged.
>>>>> 
>>>>> Ralph
>>>>> 
>>>>>> On Mar 29, 2017, at 3:42 AM, Pietro Galassi <pietro.gala...@gmail.com
>>> 
>>>>> wrote:
>>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>> sorry for boothering you all.  I'm in the need to have a logging
>>>>>> optimization and i whould like to ask you all about the use of %m%n.
>>>>>> 
>>>>>> Due to the fact i need optimization should i use :
>>>>>> 
>>>>>> %m%n
>>>>>> 
>>>>>> or should implement my own Class/Method name finder with:
>>>>>> 
>>>>>> 
>>>>>> private static String getLoggingMethod() {
>>>>>> StackTraceElement stackTraceElements[] = Thread.currentThread().
>>>>>> getStackTrace();
>>>>>> StackTraceElement caller = stackTraceElements[3];
>>>>>> return caller.getMethodName();
>>>>>> }
>>>>>> 
>>>>>> and
>>>>>> 
>>>>>> 
>>>>>> private String getLoggingMethodClassNameIfDebug(int deep) {
>>>>>> if (logger.isDebugEnabled()) {
>>>>>> StackTraceElement stackTraceElements[] = Thread.currentThread().
>>>>>> getStackTrace();
>>>>>> StackTraceElement caller = stackTraceElements[deep];
>>>>>> return buildMehodNameClassNameByStackTrace(caller);
>>>>>> } else {
>>>>>> return EMPTY;
>>>>>> }
>>>>>> }
>>>>>> 
>>>>>> 
>>>>>> ?
>>>>>> 
>>>>>> Thanks a lot in advice.
>>>>>> 
>>>>>> Best regards,
>>>>>> Pietro
>>>>> 
>>>>> 
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
>>>>> For additional commands, e-mail: log4j-user-h...@logging.apache.org
>>>>> 
>>>>> 
>>>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
>> For additional commands, e-mail: log4j-user-h...@logging.apache.org
>> 
>> 

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to