I didn't know about clirr, but I can try running that. I tried to not break any existing public methods.
I created SourceLocation because I think for Scala macros, the method name can not exist, but StackTraceElement requires a method name. I'll double check this. On Thu, Dec 21, 2017 at 12:40 AM, Ralph Goers <ralph.go...@dslextreme.com> wrote: > I’m not sure I would be comfortable applying the patch this way. Have you > run a clirr report on your changes? I am concerned that this could break > customizations that users might have made. What is the reason > SourceLocation had to be used instead of StackTraceElement? > > Ralph > > > On Dec 20, 2017, at 9:58 PM, Jeffrey Shaw <shawj...@gmail.com> wrote: > > > > It looks like the location only ever gets the file name, because that's > > what StackTraceElement gives. So that's fine. > > > > I think I'm ready for a formal review. Should I create pull requests on > > github for https://github.com/shawjef3/logging-log4j2/tree/message- > location > > and https://github.com/shawjef3/logging-log4j-scala/tree/ > message-location, > > or is there another process? > > > > On Wed, Dec 20, 2017 at 2:11 PM, Matt Sicker <boa...@gmail.com> wrote: > > > >> I think that should be configurable in the layout options. > >> > >> On 20 December 2017 at 13:04, Dominik Psenner <dpsen...@gmail.com> > wrote: > >> > >>> Could a compile time environment variable like SrcRootDirectory do the > >> job? > >>> > >>> On 20 Dec 2017 7:49 p.m., "Jeffrey Shaw" <shawj...@gmail.com> wrote: > >>> > >>>> I got it working using a custom ExtendedLogger instead of mocking. > >>>> > >>>> It looks like for file name, there are only two options. We can have > >> the > >>>> file name, or the full path to the file. The path relative to the > >> project > >>>> root looks impossible to get, unless we look for magic names like > >> "src". > >>>> Any opinion as to which to use? I'm tempted to use just the file name, > >>>> since the full path to the file seems intrusive, and is dependent on > >> the > >>>> build machine. > >>>> > >>>> On Wed, Dec 20, 2017 at 11:35 AM, Matt Sicker <boa...@gmail.com> > >> wrote: > >>>> > >>>>> It's possible that macros and mocks don't work well together, though > >>>> that's > >>>>> just a guess. > >>>>> > >>>>> On 20 December 2017 at 00:00, Jeff Shaw <shawj...@gmail.com> wrote: > >>>>> > >>>>>> I should add that manually testing it works. > >>>>>> > >>>>>> Sent from my phone > >>>>>> > >>>>>>> On Dec 20, 2017, at 12:45 AM, Jeffrey Shaw <shawj...@gmail.com> > >>>> wrote: > >>>>>>> > >>>>>>> I added some tests for traced, but they don't pass. The mocks > >> say, > >>>>>> "Actually, there were zero interactions with this mock." I could > >> use > >>>> some > >>>>>> help getting these two tests to work. > >>>>>>> > >>>>>>> https://github.com/shawjef3/logging-log4j-scala/blob/ > >>>>>> message-location/log4j-api-scala_2.12/src/test/scala/org/ > >>>>>> apache/logging/log4j/scala/LoggerTest.scala#L574 > >>>>>>> > >>>>>>>> On Sun, Dec 17, 2017 at 8:50 PM, Jeffrey Shaw < > >> shawj...@gmail.com > >>>> > >>>>>> wrote: > >>>>>>>> Thanks for the encouragement everyone! I never worked on an > >> Apache > >>>>>> project before and had no idea what to expect from the community. > >>>>>>>> > >>>>>>>> I've made some progress. One cool thing I added was a `traced` > >>>> method > >>>>>> (source), which does the work you'd want for traceEntry, traceExit, > >>> and > >>>>>> throwing. It would be cool to add catching as well, but that would > >>>>> require > >>>>>> tree traversal, which is beyond me at the moment. I also haven't > >>>> figured > >>>>>> out how to add the parameter lists. Anyway, an example: > >>>>>>>> > >>>>>>>> before: > >>>>>>>> def f() = {...} > >>>>>>>> > >>>>>>>> after: > >>>>>>>> def f() = logger.traced(Level.INFO) {...} > >>>>>>>> > >>>>>>>>> On Mon, Dec 11, 2017 at 9:55 PM, Matt Sicker <boa...@gmail.com > >>> > >>>>> wrote: > >>>>>>>>> From the little I've worked with macros (worked more with > >>> scalameta > >>>>> and > >>>>>>>>> shapeless), that looks good so far. If you can add some unit > >>> tests, > >>>>>> then > >>>>>>>>> we'd be happy to merge! > >>>>>>>>> > >>>>>>>>> On 11 December 2017 at 20:41, Jeffrey Shaw <shawj...@gmail.com > >>> > >>>>> wrote: > >>>>>>>>> > >>>>>>>>>> Great news! I'm able to run LoggingApp in the scala api repo > >>>>> without > >>>>>> it > >>>>>>>>>> calling StackLocatorUtil.calcLocation, but it prints the same > >>>>>> messages as > >>>>>>>>>> before. I have to use my patch to log4j of course. > >>>>>>>>>> > >>>>>>>>>> See https://github.com/shawjef3/logging-log4j-scala/commits/ > >>>>>>>>>> message-location > >>>>>>>>>> > >>>>>>>>>> On Sun, Dec 10, 2017 at 3:56 PM, Matt Sicker < > >> boa...@gmail.com > >>>> > >>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>>> This sounds like it'd make a great addition to the Scala > >> API! > >>>>>>>>>>> > >>>>>>>>>>> On 9 December 2017 at 15:36, Jeffrey Shaw < > >>> shawj...@gmail.com> > >>>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>>> Ralph, I agree with you entirely. My intent for these new > >>> log > >>>>>> methods > >>>>>>>>>> is > >>>>>>>>>>>> that they only be called from compile-time generated > >> code. > >>>>>>>>>>>> > >>>>>>>>>>>> On Sat, Dec 9, 2017 at 4:30 PM, Ralph Goers < > >>>>>>>>>> ralph.go...@dslextreme.com> > >>>>>>>>>>>> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>>> I don’t understand how this is a good idea. To use this > >>> you > >>>>>> would > >>>>>>>>>> need > >>>>>>>>>>> to > >>>>>>>>>>>>> do something like: > >>>>>>>>>>>>> > >>>>>>>>>>>>> Message msg = new StringMessage(getCaller(), “My > >>> Message”); > >>>>>>>>>>>>> logger.debug(msg); > >>>>>>>>>>>>> > >>>>>>>>>>>>> Unfortunately the line number would point to the line > >>> where > >>>>>>>>>> getCaller() > >>>>>>>>>>>> is > >>>>>>>>>>>>> called not to the logger statement. > >>>>>>>>>>>>> > >>>>>>>>>>>>> I had thought about modifying AbstractLogger to do > >>>>>>>>>>>>> public void debug(final Marker marker, final String > >>>> message) > >>>>> { > >>>>>>>>>>>>> logIfEnabled(getCaller(), Level.DEBUG, marker, > >>> message, > >>>>>>>>>> (Throwable) > >>>>>>>>>>>>> null); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> instead of the current > >>>>>>>>>>>>> public void debug(final Marker marker, final String > >>>> message) > >>>>> { > >>>>>>>>>>>>> logIfEnabled(FQCN, Level.DEBUG, marker, message, > >>>>>> (Throwable) > >>>>>>>>>> null); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> But the amount of changes required to get it into the > >>>>> LogEvent > >>>>>> was > >>>>>>>>>>> large. > >>>>>>>>>>>>> OTOH, if we create a CallerLocationMessage that > >> contains > >>>> the > >>>>>>>>>>>>> StackTraceElement and then have existing Messages > >> extend > >>>> that > >>>>>> then we > >>>>>>>>>>>> could > >>>>>>>>>>>>> store the location in the Message if it is a > >>>>>> CallerLocationMessage. > >>>>>>>>>>>> Calling > >>>>>>>>>>>>> getCaller() in this way would be much better since it > >> is > >>>> at a > >>>>>> fixed > >>>>>>>>>>> depth > >>>>>>>>>>>>> from the caller. > >>>>>>>>>>>>> > >>>>>>>>>>>>> With Java 9 this could become: > >>>>>>>>>>>>> public void debug(final Marker marker, final String > >>>> message) > >>>>> { > >>>>>>>>>>>>> logIfEnabled(stackWalker.walk( > >>>> s->s.skip(1).findFirst(), > >>>>>>>>>>> Level.DEBUG, > >>>>>>>>>>>>> marker, message, (Throwable) null); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> although that would pass a StackFrame instead of a > >>>>>> StackTraceElement. > >>>>>>>>>>> The > >>>>>>>>>>>>> only problems with this is that there is still some > >>>> overhead > >>>>> in > >>>>>>>>>> calling > >>>>>>>>>>>>> StackWalker like this. Also, if this is called from a > >>>> facade, > >>>>>> such as > >>>>>>>>>>>>> log4j-slf4j-impl then the number of levels that have to > >>> be > >>>>>> skipped > >>>>>>>>>>> would > >>>>>>>>>>>> be > >>>>>>>>>>>>> different. > >>>>>>>>>>>>> > >>>>>>>>>>>>> I would really prefer if there was some way to capture > >>> the > >>>>> line > >>>>>>>>>> number > >>>>>>>>>>>>> information for the various loggers when the annotation > >>>>>> processor > >>>>>>>>>> runs > >>>>>>>>>>> at > >>>>>>>>>>>>> compile time. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Ralph > >>>>>>>>>>>>> > >>>>>>>>>>>>>> On Dec 9, 2017, at 1:22 PM, Jeffrey Shaw < > >>>>> shawj...@gmail.com > >>>>>>> > >>>>>>>>>> wrote: > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Thanks for the link, Mikael. I'll take a look at it. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> I added some plumbing to core to allow clients to > >> pass > >>> a > >>>>>>>>>>>>> StackTraceElement > >>>>>>>>>>>>>> to loggers. I'd like a code review. I'm happy to try > >>>> other > >>>>>> methods. > >>>>>>>>>>> See > >>>>>>>>>>>>> the > >>>>>>>>>>>>>> following commit. > >>>>>>>>>>>>>> https://github.com/shawjef3/logging-log4j2/commit/ > >>>>>>>>>>>>> 9c42073e9ca4f25a2f4075b1791eee2893534c54 > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> On Sat, Dec 9, 2017 at 10:09 AM, Mikael Ståldal < > >>>>>> mi...@apache.org> > >>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Have you tried the Log4j Scala API? > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> http://logging.apache.org/ > >> log4j/2.x/manual/scala-api. > >>>> html > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> It does currently not support this, but it uses > >> Scala > >>>>>> macros, and > >>>>>>>>>>> this > >>>>>>>>>>>>>>> could be added there. But log4j-api and/or > >> log4j-core > >>>>>> probably > >>>>>>>>>> needs > >>>>>>>>>>>> to > >>>>>>>>>>>>>>> adapted as well. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> On 2017-12-09 07:30, Jeffrey Shaw wrote: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Hello, > >>>>>>>>>>>>>>>> I've found that I am able to use Scala macros to > >>>> provide > >>>>>>>>>>> compile-time > >>>>>>>>>>>>>>>> source information for log messages. However, I > >> don't > >>>> see > >>>>>> a way > >>>>>>>>>> to > >>>>>>>>>>>>> inject > >>>>>>>>>>>>>>>> this into log4j's logging mechanism. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> I'm wondering if there is something I'm missing, or > >>> if > >>>>>> LogEvent's > >>>>>>>>>>>>>>>> getSource > >>>>>>>>>>>>>>>> method could be duplicated in Message. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> We could then have zero-overhead location > >> information > >>>> in > >>>>>> logs. > >>>>>>>>>> I'm > >>>>>>>>>>>>>>>> thinking > >>>>>>>>>>>>>>>> that tools other than Scala could also take > >> advantage > >>>> of > >>>>>> this. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> -- > >>>>>>>>>>> Matt Sicker <boa...@gmail.com> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> -- > >>>>>>>>> Matt Sicker <boa...@gmail.com> > >>>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> Matt Sicker <boa...@gmail.com> > >>>>> > >>>> > >>> > >> > >> > >> > >> -- > >> Matt Sicker <boa...@gmail.com> > >> > > >