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
>
>

Reply via email to