Hi Nick,

Creating a single new level is seldom the right solution IMO. It's not like
you are missing a level of granularity (we have custom level examples that
demonstrate that, like a VERBOSE level that sits between INFO and DEBUG).
It sounds like you need to use _hierarchical_ loggers and/or markers.

The fact that the level is called BUSINESS is also a hint that a level is
not quite right because it does not fit in the Level vernacular (INFO,
WARN, and so on).

If you needed a different set of levels, that would be another story (like
the DEFCON levels example).

Gary

On Mon, Aug 31, 2015 at 8:10 AM, Nicholas Duane <nic...@msn.com> wrote:

> Thanks for the feedback.  I will look into Markers and MDC.
>
> With respect to using a separate logger, it would seem I would lose the
> information about what application code, eg. the class logger, is sourcing
> the event.  We would like to have this information.  On top of that, it
> seems odd, maybe to me only, that for this new level we have our own
> logger.  It seemed reasonable to me that this new event we want to capture
> is just a new level.  Just like a DEBUG event is different from an INFO
> event.  If I define a BUSINESS level why would that not follow the same
> design as the current levels?  You wouldn't suggest having different
> loggers for TRACE DEBUG INFO WARN ERROR FATAL, would you?  I think one of
> the reasons someone on our side is suggesting I have separate loggers is
> that they think the overhead of filtering at the appender is going to have
> a noticeable impact.  Our plan, at least the one I have now in my head, is
> that we'll have some number of appenders in the root.  We'll then filter x
> < INFO events to a tracing appender, INFO <= x <= FATAL to a logging
> appender, and our custom level will go to another appender.  Thoughts?
>
> Thanks,
> Nick
>
> > Subject: Re: approach for defining loggers
> > From: ralph.go...@dslextreme.com
> > Date: Sat, 29 Aug 2015 20:59:36 -0700
> > To: log4j-user@logging.apache.org
> >
> >
> > > On Aug 29, 2015, at 7:44 PM, Nicholas Duane <nic...@msn.com> wrote:
> > >
> > > I'm curious if there is a prescribed approach to defining loggers.
> Let me state what my assumption is.  I assume that normally if some piece
> of code wants to log events/messages that it should create a logger for
> itself.  I guess a reasonable name to use is the class name itself.  In
> terms of logger configuration I would expect that no loggers are specified
> in the log4j configuration UNLESS is needs settings other than the
> default.  The root logger would specify the default settings, eg. level and
> appenders.  If some piece of code tied to a logger needs to enable tracing
> in order to debug an issue then you would add that logger to the
> configuration and set the level less specific for that logger.  Is this a
> typical and reasonable approach?
> >
> > What you describe here is the common convention. It is a reasonable
> approach.
> >
> > >
> > > I asked because we have the need for a new type of event.  To have
> this event flow to where we want it to flow the plan is to have a custom
> level and have all events at that level captured by a specific appender.
> My assumption was that for existing applications we'd just need to add our
> appender to the root and add our custom level.  The app would need to be
> modified to log our new event at the custom level.  However, someone
> suggested that we could also create a separate logger for this event.  My
> thinking is that while we don't ever want to turn off logging of this
> event, loggers represent "event sources", e.g the code raising the events
> and thus having multiple different pieces of code use the same logger
> wouldn't allow you to turn on/off logging from those different sections of
> code independently.  I think the current configuration includes all the
> loggers.  Normally I would expect there to be many, on the order of 10's or
> 100's, loggers within an application.  However, in the case I was given
> there were only a handful because I think this handful is shared.  So as I
> mentioned, this doesn't sound like an ideal design as you have less
> granularity on what you can turn on/off.
> >
> > You have a few options. Using a CustomLevel would not be the option I
> would choose.  Creating a custom Logger will certainly work and makes
> routing the message to the appropriate appender rather easy.  Another
> approach is to use Markers.  Markers are somewhat hierarchical so you can
> use them for a variety of purposes.  If you look at how Log4j handles event
> logging it actually does both - it specifies EventLogger as the name of the
> logger to use and it uses Markers to identify the kind of event.
> >
> > A third option is to use the MDC or Logger properties. If you do that
> then you can have information included in the actual logging event that can
> affect how it is routed. I also built a system that uses the RFC5424 format
> so that the event could have lots of key/value pairs to identify the events.
> >
> > Unfortunately, without knowing more details I don’t know that I can give
> you a better idea on how I would implement it.
> >
> > Ralph
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
> > For additional commands, e-mail: log4j-user-h...@logging.apache.org
> >
>
>



-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to