+1 on SLF4J - that's what it does: eliminate the tight coupling of code
generating log output from the logging implementation.

For testing, I would just make the logger injectable, but configure a
default.  Here's a "Live Template" for intellij that does this (minus the
getter and setter):

private static final org.slf4j.Logger DEFAULT_LOGGER =
org.slf4j.LoggerFactory.getLogger($CLASS$.class);


private org.slf4j.Logger log = DEFAULT_LOGGER;


Cheers!

Art


On Wed, May 4, 2022 at 8:15 AM Matt Pavlovich <mattr...@gmail.com> wrote:

> Hey Clebert-
>
> We just did this as part of log4j2 conversion.  Here is a sample test
> class w/ in-line appender:
>
>
> https://github.com/apache/activemq/blob/ae30dce4e24ce5e0467d2a3219627cbefef1f0ae/activemq-unit-tests/src/test/java/org/apache/activemq/usage/StoreUsageLimitsTest.java
> <
> https://github.com/apache/activemq/blob/ae30dce4e24ce5e0467d2a3219627cbefef1f0ae/activemq-unit-tests/src/test/java/org/apache/activemq/usage/StoreUsageLimitsTest.java
> >
>
> Matt Pavlovich
>
> > On May 4, 2022, at 7:37 AM, Clebert Suconic <clebert.suco...@gmail.com>
> wrote:
> >
> > A few questions I have:
> >
> > - One of things we do in the testsuite is to capture loggers with an
> > interceptor and assert the loggers were called. How would we do such a
> > thing? an appender? Can someone point me to a test in ActiveMQ5 doing
> > that?
> >
> > - how would you configure Log4J? (assuming we are using log4j with SLF4j)
> >
> > - also we have separate loggers for Auditing... I think that will be
> > just an entry on the log4j configuration.
> >
> > On Wed, May 4, 2022 at 8:16 AM Clebert Suconic
> > <clebert.suco...@gmail.com> wrote:
> >>
> >> MDC seems nice, but I don't think it's relevant here.. we need the
> >> Codes as part of the messages where they appear. Some users will
> >> create alerts for them on their log frameworks.
> >>
> >> On Wed, May 4, 2022 at 1:16 AM Christoph Läubrich <m...@laeubi-soft.de>
> wrote:
> >>>
> >>> SLF4J support the "Mapped Diagnostic Context"
> >>>
> >>> maybe this would be a good replacement here? you could even add more
> >>> context infos then and people are free to format them as they like:
> >>>
> >>> https://logback.qos.ch/manual/mdc.html
> >>>
> >>> Am 03.05.22 um 22:30 schrieb Justin Bertram:
> >>>> The point here is that the current logging implementation provides a
> simple
> >>>> way to associate codes with each user-facing log message and
> exception.
> >>>> This is helpful to those who may want to monitor logs for certain
> codes
> >>>> (e.g. for alerting purposes), filter some codes out, etc. In this way
> the
> >>>> logging is part of a contract with the users much like an API is a
> contract
> >>>> with developers. The codes stay consistent across versions but the
> content
> >>>> of the message may change (e.g. to provide more information, correct
> >>>> spelling errors, typos, etc.). This kind of facade also opens the
> door for
> >>>> fairly simple internationalization.
> >>>>
> >>>> The goals here as I see them:
> >>>>  - Maintain the aforementioned functionality.
> >>>>  - Ditch the dependence on JBoss Log Manager and JBoss Logging.
> >>>>
> >>>> Having a simple implementation of our own is an easy way to do this.
> If we
> >>>> decide to go this route then (and only then) we will need to decide
> on the
> >>>> underlying logging facade and implementation.
> >>>>
> >>>>
> >>>> Justin
> >>>>
> >>>>
> >>>> On Tue, May 3, 2022 at 3:17 PM Christopher Shannon <
> >>>> christopher.l.shan...@gmail.com> wrote:
> >>>>
> >>>>> Using SL4J makes sense to me as that is what almost everyone else
> uses so
> >>>>> it's pretty standard and easy to swap implementations
> >>>>>
> >>>>> On Mon, May 2, 2022 at 1:26 PM Justin Bertram <jbert...@apache.org>
> wrote:
> >>>>>
> >>>>>> I think this looks great, Clebert. The code is straightforward, and
> I
> >>>>> like
> >>>>>> the idea of reducing our dependencies.
> >>>>>>
> >>>>>> This is a +1 from me.
> >>>>>>
> >>>>>>
> >>>>>> Justin
> >>>>>>
> >>>>>> On Fri, Apr 29, 2022 at 3:43 PM Clebert Suconic <
> >>>>> clebert.suco...@gmail.com
> >>>>>>>
> >>>>>> wrote:
> >>>>>>
> >>>>>>> For a while, I thought it would be nice to remove jboss-logging
> from
> >>>>>>> artemis and use a generic logger. (SLF4J, Log4j, commons..
> whatever..
> >>>>>>> it's all orthogonal and transparent to this discussion, we can
> decide
> >>>>>>> that at a later point).
> >>>>>>>
> >>>>>>>
> >>>>>>> One of the issues we had while making the move would be the
> generated
> >>>>>>> error codes out of the Log Processor.
> >>>>>>>
> >>>>>>>
> >>>>>>> So, I put together a prototype here that would generate code based
> on
> >>>>>>> an interface and that could use whatever logger we choose. I will
> try
> >>>>>>> to never remove the branch for future reference:
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> https://github.com/clebertsuconic/activemq-artemis/tree/prototype-log-processor
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> the Log processor would read the annotations and generate the code:
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> https://github.com/clebertsuconic/activemq-artemis/blob/prototype-log-processor/artemis-log-processor/src/main/java/org/apache/activemq/artemis/logprocessor/processor/LogProcessor.java
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> A testcase here would show how such processing would work:
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> https://github.com/clebertsuconic/activemq-artemis/blob/prototype-log-processor/artemis-log-processor/src/test/java/org/apache/activemq/i18n/test/SimpleBundleTest.java
> >>>>>>>
> >>>>>>>
> >>>>>>> I have added some code on the artemis-server, trying to simulate
> what
> >>>>>>> we would do in "real life":
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> https://github.com/clebertsuconic/activemq-artemis/blob/prototype-log-processor/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerNewLogger.java
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> This test here is making a call to the NewLogger, just to show how
> >>>>>>> processing would work. Everything would work just like it would
> now:
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> https://github.com/clebertsuconic/activemq-artemis/blob/prototype-log-processor/artemis-server/src/test/java/org/apache/activemq/artemis/core/TestSample.java
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> I would appreciate some feedback if this is a good way forward or
> >>>>> not...
> >>>>>>>
> >>>>>>> (please let's not diverge on what logging framework we are choosing
> >>>>>>> now... that's a separate discussion).
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Clebert Suconic
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>
> >>
> >>
> >> --
> >> Clebert Suconic
> >
> >
> >
> > --
> > Clebert Suconic
>
>

Reply via email to