Gary, looks like the code in ReflectionUtil already has a comment with a
reference to the log4j-perf benchmark. (Nice, Matt!)
The duplication in this case is just "new Throwable()", so I think we're
good.

On Thu, Nov 12, 2015 at 1:16 AM, Matt Sicker <[email protected]> wrote:

> I know I used that in ReflectionUtil because of the log4j-perf test that
> demonstrates the difference between Throwable and Thread.
>
> On 11 November 2015 at 10:11, Gary Gregory <[email protected]> wrote:
>
>> I suggest you add a comment there too or preferably refactor the
>> duplication.
>>
>> Gary
>> On Nov 11, 2015 8:05 AM, "Remko Popma" <[email protected]> wrote:
>>
>>> I agree I should have added a ref to the JIRA to document the reason for
>>> doing it this way. I added a comment just now.
>>>
>>> About moving this to a util class, I'd be fine with that.
>>> FYI, the other place that uses {{new Throwable().getStackTrace()}} is
>>> ReflectionUtil#getEquivalentStackTraceElement.
>>>
>>>
>>> On Thu, Nov 12, 2015 at 12:48 AM, Gary Gregory <[email protected]>
>>> wrote:
>>>
>>>> I think this needs a code comment to avoid the code being changed in the
>>>> future to undo the improvement.
>>>>
>>>> IMO all perf changes like this need good docs with a ref to the Jira.
>>>> Who
>>>> knows how this kind of stuff will play out on top on Java 8 and 9.
>>>>
>>>> If we do this kind of call in different places, we should abstract it
>>>> out
>>>> as well in a util method which can be amply documented.
>>>>
>>>> Gary
>>>>
>>>> On Nov 11, 2015 5:48 AM, <[email protected]> wrote:
>>>>
>>>> > Repository: logging-log4j2
>>>> > Updated Branches:
>>>> >   refs/heads/master 381acc0e3 -> 65adfab1b
>>>> >
>>>> >
>>>> > LOG4J2-1029 Performance improvement when gathering location
>>>> information
>>>> >
>>>> > - Use new Throwable().getStackTrace() instead of
>>>> > Thread.currentThread().getStackTrace()
>>>> >
>>>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>> > Commit:
>>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/65adfab1
>>>> > Tree:
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/65adfab1
>>>> > Diff:
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/65adfab1
>>>> >
>>>> > Branch: refs/heads/master
>>>> > Commit: 65adfab1b6afcbffde767b5d8a3213341c84c1eb
>>>> > Parents: 381acc0
>>>> > Author: rpopma <[email protected]>
>>>> > Authored: Wed Nov 11 22:48:42 2015 +0900
>>>> > Committer: rpopma <[email protected]>
>>>> > Committed: Wed Nov 11 22:48:42 2015 +0900
>>>> >
>>>> > ----------------------------------------------------------------------
>>>> >  .../java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java    |
>>>> 2 +-
>>>> >  src/changes/changes.xml                                           |
>>>> 3 +++
>>>> >  2 files changed, 4 insertions(+), 1 deletion(-)
>>>> > ----------------------------------------------------------------------
>>>> >
>>>> >
>>>> >
>>>> >
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65adfab1/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
>>>> > ----------------------------------------------------------------------
>>>> > diff --git
>>>> >
>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
>>>> >
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
>>>> > index d74d6e2..a6c2087 100644
>>>> > ---
>>>> >
>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
>>>> > +++
>>>> >
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
>>>> > @@ -542,7 +542,7 @@ public Log4jLogEvent(final String loggerName,
>>>> final
>>>> > Marker marker, final String
>>>> >          if (fqcnOfLogger == null) {
>>>> >              return null;
>>>> >          }
>>>> > -        final StackTraceElement[] stackTrace =
>>>> > Thread.currentThread().getStackTrace();
>>>> > +        final StackTraceElement[] stackTrace = new
>>>> > Throwable().getStackTrace();
>>>> >          StackTraceElement last = null;
>>>> >          for (int i = stackTrace.length - 1; i > 0; i--) {
>>>> >              final String className = stackTrace[i].getClassName();
>>>> >
>>>> >
>>>> >
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65adfab1/src/changes/changes.xml
>>>> > ----------------------------------------------------------------------
>>>> > diff --git a/src/changes/changes.xml b/src/changes/changes.xml
>>>> > index c82cc9d..e6b2f97 100644
>>>> > --- a/src/changes/changes.xml
>>>> > +++ b/src/changes/changes.xml
>>>> > @@ -42,6 +42,9 @@
>>>> >        <action issue="LOG4J2-1187" dev="ggregory" type="add">
>>>> >          Support use case for
>>>> > java.sql.DriverManager.setLogStream(PrintStream).
>>>> >        </action>
>>>> > +      <action issue="LOG4J2-1029" dev="rpopma" type="fix"
>>>> due-to="Stefan
>>>> > Leonhartsberger">
>>>> > +        Performance improvement when gathering location information.
>>>> > +      </action>
>>>> >        <action issue="LOG4J2-1172" dev="rpopma" type="fix">
>>>> >          Fixed ThreadLocal leak [AsyncLogger$Info] on Tomcat when
>>>> using
>>>> > AsyncLoggerContextSelector.
>>>> >        </action>
>>>> >
>>>> >
>>>>
>>>> --001a11419fd83af63a052445b36d
>>>> Content-Type: text/html; charset=UTF-8
>>>> Content-Transfer-Encoding: quoted-printable
>>>>
>>>> <p dir=3D"ltr">I think this needs a code comment to avoid the code
>>>> being ch=
>>>> anged in the future to undo the improvement. </p>
>>>> <p dir=3D"ltr">IMO all perf changes like this need good docs with a ref
>>>> to =
>>>> the Jira. Who knows how this kind of stuff will play out on top on Java
>>>> 8 a=
>>>> nd 9. </p>
>>>> <p dir=3D"ltr">If we do this kind of call in different places, we
>>>> should ab=
>>>> stract it out as well in a util method which can be amply
>>>> documented.</p>
>>>> <p dir=3D"ltr">Gary</p>
>>>> <div class=3D"gmail_quote">On Nov 11, 2015 5:48 AM,  &lt;<a
>>>> href=3D"mailto:=
>>>> [email protected]">[email protected]</a>&gt; wrote:<br
>>>> type=3D"attribution"=
>>>> ><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0
>>>> .8ex;border-left:1=
>>>> px #ccc solid;padding-left:1ex">Repository: logging-log4j2<br>
>>>> Updated Branches:<br>
>>>> =C2=A0 refs/heads/master 381acc0e3 -&gt; 65adfab1b<br>
>>>> <br>
>>>> <br>
>>>> LOG4J2-1029 Performance improvement when gathering location
>>>> information<br>
>>>> <br>
>>>> - Use new Throwable().getStackTrace() instead of<br>
>>>> Thread.currentThread().getStackTrace()<br>
>>>> <br>
>>>> Project: <a href=3D"
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/r=
>>>> epo" rel=3D"noreferrer" target=3D"_blank">
>>>> http://git-wip-us.apache.org/repo=
>>>> s/asf/logging-log4j2/repo</a><br>
>>>> Commit: <a href=3D"
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/co=
>>>> mmit/65adfab1" rel=3D"noreferrer" target=3D"_blank">
>>>> http://git-wip-us.apach=
>>>> e.org/repos/asf/logging-log4j2/commit/65adfab1</a><br>
>>>> Tree: <a href=3D"
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree=
>>>> /65adfab1" rel=3D"noreferrer" target=3D"_blank">
>>>> http://git-wip-us.apache.or=
>>>> g/repos/asf/logging-log4j2/tree/65adfab1</a><br>
>>>> Diff: <a href=3D"
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff=
>>>> /65adfab1" rel=3D"noreferrer" target=3D"_blank">
>>>> http://git-wip-us.apache.or=
>>>> g/repos/asf/logging-log4j2/diff/65adfab1</a><br>
>>>> <br>
>>>> Branch: refs/heads/master<br>
>>>> Commit: 65adfab1b6afcbffde767b5d8a3213341c84c1eb<br>
>>>> Parents: 381acc0<br>
>>>> Author: rpopma &lt;<a href=3D"mailto:[email protected]";>
>>>> [email protected]</=
>>>> a>&gt;<br>
>>>> Authored: Wed Nov 11 22:48:42 2015 +0900<br>
>>>> Committer: rpopma &lt;<a href=3D"mailto:[email protected]
>>>> ">[email protected]=
>>>> g</a>&gt;<br>
>>>> Committed: Wed Nov 11 22:48:42 2015 +0900<br>
>>>> <br>
>>>>
>>>> ----------------------------------------------------------------------<br>
>>>> =C2=A0.../java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java=C2=A0
>>>> =
>>>> =C2=A0 | 2 +-<br>
>>>> =C2=A0src/changes/changes.xml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
>>>> =C2=
>>>> =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
>>>> =C2=A0 =
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 3 +++<br>
>>>> =C2=A02 files changed, 4 insertions(+), 1 deletion(-)<br>
>>>>
>>>> ----------------------------------------------------------------------<br>
>>>> <br>
>>>> <br>
>>>> <a href=3D"
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65adf=
>>>>
>>>> ab1/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEve=
>>>> nt.java" rel=3D"noreferrer" target=3D"_blank">
>>>> http://git-wip-us.apache.org/=
>>>>
>>>> repos/asf/logging-log4j2/blob/65adfab1/log4j-core/src/main/java/org/apache/=
>>>> logging/log4j/core/impl/Log4jLogEvent.java</a><br>
>>>>
>>>> ----------------------------------------------------------------------<br>
>>>> diff --git
>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Lo=
>>>> g4jLogEvent.java
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/i=
>>>> mpl/Log4jLogEvent.java<br>
>>>> index d74d6e2..a6c2087 100644<br>
>>>> ---
>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogE=
>>>> vent.java<br>
>>>> +++
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogE=
>>>> vent.java<br>
>>>> @@ -542,7 +542,7 @@ public Log4jLogEvent(final String loggerName, final
>>>> Mar=
>>>> ker marker, final String<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (fqcnOfLogger =3D=3D null) {<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return null;<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}<br>
>>>> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 final StackTraceElement[] stackTrace =3D
>>>> Threa=
>>>> d.currentThread().getStackTrace();<br>
>>>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 final StackTraceElement[] stackTrace =3D
>>>> new T=
>>>> hrowable().getStackTrace();<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0StackTraceElement last =3D null;<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0for (int i =3D stackTrace.length - 1;
>>>> i &=
>>>> gt; 0; i--) {<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0final String className
>>>> =3D =
>>>> stackTrace[i].getClassName();<br>
>>>> <br>
>>>> <a href=3D"
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/65adf=
>>>> ab1/src/changes/changes.xml" rel=3D"noreferrer" target=3D"_blank">
>>>> http://gi=
>>>>
>>>> t-wip-us.apache.org/repos/asf/logging-log4j2/blob/65adfab1/src/changes/chan=
>>>> ges.xml</a><br>
>>>>
>>>> ----------------------------------------------------------------------<br>
>>>> diff --git a/src/changes/changes.xml b/src/changes/changes.xml<br>
>>>> index c82cc9d..e6b2f97 100644<br>
>>>> --- a/src/changes/changes.xml<br>
>>>> +++ b/src/changes/changes.xml<br>
>>>> @@ -42,6 +42,9 @@<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0&lt;action issue=3D&quot;LOG4J2-1187&quot;
>>>> dev=
>>>> =3D&quot;ggregory&quot; type=3D&quot;add&quot;&gt;<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Support use case for
>>>> java.sql.DriverManag=
>>>> er.setLogStream(PrintStream).<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0&lt;/action&gt;<br>
>>>> +=C2=A0 =C2=A0 =C2=A0 &lt;action issue=3D&quot;LOG4J2-1029&quot;
>>>> dev=3D&quo=
>>>> t;rpopma&quot; type=3D&quot;fix&quot; due-to=3D&quot;Stefan
>>>> Leonhartsberger=
>>>> &quot;&gt;<br>
>>>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Performance improvement when gathering
>>>> locatio=
>>>> n information.<br>
>>>> +=C2=A0 =C2=A0 =C2=A0 &lt;/action&gt;<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0&lt;action issue=3D&quot;LOG4J2-1172&quot;
>>>> dev=
>>>> =3D&quot;rpopma&quot; type=3D&quot;fix&quot;&gt;<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Fixed ThreadLocal leak
>>>> [AsyncLogger$Info]=
>>>> on Tomcat when using AsyncLoggerContextSelector.<br>
>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0&lt;/action&gt;<br>
>>>> <br>
>>>> </blockquote></div>
>>>>
>>>> --001a11419fd83af63a052445b36d--
>>>>
>>>
>>>
>
>
> --
> Matt Sicker <[email protected]>
>

Reply via email to