> 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