[ https://issues.apache.org/jira/browse/LOG4J2-555?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13925138#comment-13925138 ]
Remko Popma commented on LOG4J2-555: ------------------------------------ I did some performance tests but did not see any significant difference. SimplePerfTest gave very similar results before and after applying the patch. I also ran the {{org.apache.logging.log4j.core.async.perftest.PerfTestDriver}} tests with {{-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector}} to make all loggers asynchronous. Again the differences between before and after are within the standard deviation: || ||Before|| ||After (1)|| ||After (2)|| || || ||Ops/sec||stdev||Ops/sec||stdev||Ops/sec||stdev|| |1 thread| 4,306,635| 680,748| 4,035,179| 154,953| 4,727,986| 1,274,861| |2 threads| 3,177,743| 2,204,713| 2,223,271| 722,988| 2,786,508| 700,968| |4 threads| 3,020,324| 1,960,143| 3,443,250| 1,643,893| 3,839,109| 2,997,553| So I guess it is just a matter of do we like the original code better or the new code better? > Location-based functionality broken in AbstractLoggerWrapper subclasses > ----------------------------------------------------------------------- > > Key: LOG4J2-555 > URL: https://issues.apache.org/jira/browse/LOG4J2-555 > Project: Log4j 2 > Issue Type: Bug > Components: API, Core > Affects Versions: 2.0-rc1 > Reporter: Remko Popma > Assignee: Remko Popma > Fix For: 2.0-rc2 > > Attachments: LOG4J2-555-delegate.patch > > > *How to reproduce* > * Create a custom logger that extends {{AbstractLoggerWrapper}} (or generate > one with the tool attached to LOG4J2-519) > * In the custom logger provide a public method that invokes the {{log(Level, > String)}} method > * Configure a pattern layout that uses location, like %C for the logger FQCN > * From a sample app, call the public method on your custom logger. > * The output will show the class name of the custom logger instead of the > class name of the calling class in the sample application. > *Cause* > {{AbstractLogger}}'s FQCN field is {{static final}} and initialized to > {{AbstractLogger.class.getName()}}. Then, in > {{Log4jLogEvent#calcLocation()}}, when walking over the stack trace elements, > the element _following_ the FQCN is returned. So only loggers that directly > subclass from {{AbstractLogger}} will work correctly. Loggers that inherit > from {{AbstractLoggerWrapper}} are two levels removed from {{AbstractLogger}} > and the {{calcLocation()}} method will not work correctly. > *Solution* > I think {{AbstractLogger}}'s FQCN field should be made non-static, and > initialized to {{getClass().getName()}} in the constructor of > {{AbstractLogger}}. {{Log4jLogEvent#calcLocation()}} can then be modified to > return the {{StackElement}} whose class name matches the FQCN, instead of the > next element. Location-based functionality should then work for arbitrarily > deep subclass hierarchies of AbstractLogger. -- This message was sent by Atlassian JIRA (v6.2#6252) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org