Perfect. So using a method that will add location information on demand is the best choice. This will let remove %M or the specific method finding logic whenever it's not necessary.
Regards. On Thu, Mar 30, 2017 at 4:36 PM, Remko Popma <remko.po...@gmail.com> wrote: > > > 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 > >