|
From: Mike S. <m...@pe...> - 2008-05-13 15:43:43
|
On Tue, 13 May 2008, Erskine, Thomas (IT) wrote:
> I do indeed want
>
> $logger->log($level, $msg, $key)
>
> to be dealt with differently depending on the appender it ends up on.
> That's part of the point of having different appenders; they ought to be
> independant. The problem is that it doesn't seem possible to use
> appenders simultaneously which set (and require) warp_message=0 and ones
> which don't.
I don't think that this is true, warp_message is a per-appender setting
and can be set individually (and differently) per appender. The
restriction is that the you need to use the NoopLayout with the appender
that has warp_message set.
> I've just thought of another way to do this. If I set
> warp_message=sub{return $_[0]} on the file appender, then things
> should just work. I don't like putting code in the log configuration
> file, but it's worth a shot. Just a sec... Yup. It works.
That's exactly right -- and since it's per-appender, it won't affect the
other 'fancy' appender. But, the ugly part is that with warp_message
turned on, the appender's log() method gets an a reference to an array
of message chunks, which the file appender can't deal with.
> The problem with using the MDC is that this isn't something which is
> intended to persist for a while. The whole point is to be able to set
> the Netcool AlertKey on a per-message basis. Of course I _could_ use
> the MDC, but my usage would look like:
>
> Log::Log4perl::MDC->put("netcool-key", $key);
> $logger->log($level, $msg);
> Log::Log4perl::MDC->put("netcool-key", undef);
>
> which isn't exactly handy.
... or you define a wrapper around that:
http://log4perl.sourceforge.net/d/Log/Log4perl.html#6acb7
-- Mike
Mike Schilli
m...@pe...
>
> > -----Original Message-----
> > From: Mike Schilli [mailto:m...@pe...]
> > Sent: Tuesday, May 13, 2008 2:26 AM
> > To: Erskine, Thomas (IT)
> > Cc: log...@pe...
> > Subject: Re: log4perl appenders with warp_message=0
> >
> > On Fri, 9 May 2008, Erskine, Thomas (IT) wrote:
> >
> > > The other logs an event to Netcool (specifying
> > warp_message=0) and it
> > > works fine. It allows you to call log like:
> > >
> > > $logger->log($level, $msg, $key)
> > >
> > > so that you can specify a Netcool alert key.
> > >
> > > Then comes the problem: I made a configuration file including both
> > > appenders. Now I lose. The Netcool appender continues to
> > work nicely.
> > > However, the file appender mashes all the args together if
> > I specify
> > > the key. Which is the expected behaviour for it, but then
> > I can't use
> > > the key feature with netcool. I could make it work by setting
> > > warp_message=0 on the file appender, but to do that I have
> > to set the
> > > layout to NoopLayout, so I can't get nicely formatted log
> > entries there.
> > >
> > > It seems as if there is no way to use both types of appender (with
> > > warp_message=0 and without) in the same config file. Or am
> > I missing
> > > something?
> >
> > Hi Thomas,
> >
> > It seems like you want a statement like
> >
> > $logger->log($level, $msg, $key)
> >
> > to have two different meanings, depending on which appender
> > the message ends up at.
> >
> > On the Netcool appender, you want it to use the $key for a
> > special purpose, on the file appender, you want it to sweep
> > $key under the carpet -- seems inconsistent to me, as it's
> > not clear what another random new appender would do with this.
> >
> > For cases like this, I would stuff the Netcool key in the MDC:
> >
> > http://log4perl.sourceforge.net/d/Log/Log4perl/MDC.html
> >
> > So instead of saying
> >
> > $logger->log($level, $msg, $key);
> >
> > you would say
> >
> > Log::Log4perl::MDC->put("netcool-key", $key);
> > $logger->log($level, $msg);
> >
> > and the Netcool appender would either fetch the the key from
> > the MDC in its log() method and do something with it or you
> > could access it as %X{netcool-key} in the layout:
> >
> >
> > http://log4perl.sourceforge.net/d/Log/Log4perl/Layout/PatternL
> > ayout.html
> >
> > Would that work for you?
> >
> > Can I post this message to the mailing list? Looks like this
> > could be useful for other folks as well.
> >
> > -- Mike
> >
> > Mike Schilli
> > m...@pe...
> >
> --------------------------------------------------------
>
> NOTICE: If received in error, please destroy and notify sender. Sender does not intend to waive confidentiality or privilege. Use of this email is prohibited when received in error.
>
|