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

Reply via email to