You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-user@logging.apache.org by koger <ka...@f-kousgaard.dk> on 2009/06/18 14:27:26 UTC
Log4net: context only for exception
Hi
I also posted this question at
http://stackoverflow.com/questions/1011730/log4net-context-only-for-exception
http://stackoverflow.com/questions/1011730/log4net-context-only-for-exception
. But I think this might be a better place. Here is the question:
I'm looking for a way to collect a set of data, that will only be used for
debugging, the data should only be logged if I log an exception. AFAIK it
can happend when ILog.Error, Fatal or Debug with an exception argument when
logging other data with an exception, the data shouldn't be logged.
I plan to use the GlobalContext or ThreadContext for building the dataset.
My idea was to hook into Log4Net and attach to an event I would imagine, to
alter the message pattern to include contexts. But I can't find any event
that would help me, perhaps there also might be a easier way?
What do you think about the overall design of this, am I on the right track
or am I missing something?
If this way is good, how can I implement it?
--
View this message in context: http://www.nabble.com/Log4net%3A-context-only-for-exception-tp24091804p24091804.html
Sent from the Log4net - Users mailing list archive at Nabble.com.
Re: Log4net: context only for exception
Posted by Ron Grabowski <ro...@yahoo.com>.
You can make two different appenders: one that handles DEBUG statements and one that handles ERROR and higher messages or you could change the layout based on the level of the message:
<layout type="ConsoleApplication1.LevelPatternLayout, ConsoleApplication1">
<levelConversionPattern>
<level value="DEBUG" />
<conversionPattern value="%level - %message%newline" />
</levelConversionPattern>
<levelConversionPattern>
<level value="ERROR" />
<conversionPattern value="%level - %logger - %property{ErrorUserId} - %message%newline" />
</levelConversionPattern>
</layout>
public class LevelPatternLayout : PatternLayout
{
private readonly Hashtable m_levelToPatternLayout = new Hashtable();
public override void Format(TextWriter writer, LoggingEvent loggingEvent)
{
var patternLayout = m_levelToPatternLayout[loggingEvent.Level] as PatternLayout;
if (patternLayout == null)
{
base.Format(writer, loggingEvent);
}
else
{
patternLayout.Format(writer, loggingEvent);
}
}
public void AddLevelConversionPattern(LevelConversionPattern levelLayout)
{
m_levelToPatternLayout[levelLayout.Level] = new PatternLayout(levelLayout.ConversionPattern);
}
}
public class LevelConversionPattern
{
public Level Level { get; set; }
public string ConversionPattern { get; set; }
}
----- Original Message ----
From: koger <ka...@f-kousgaard.dk>
To: log4net-user@logging.apache.org
Sent: Thursday, June 18, 2009 8:27:26 AM
Subject: Log4net: context only for exception
Hi
I also posted this question at
http://stackoverflow.com/questions/1011730/log4net-context-only-for-exception
http://stackoverflow.com/questions/1011730/log4net-context-only-for-exception
. But I think this might be a better place. Here is the question:
I'm looking for a way to collect a set of data, that will only be used for
debugging, the data should only be logged if I log an exception. AFAIK it
can happend when ILog.Error, Fatal or Debug with an exception argument when
logging other data with an exception, the data shouldn't be logged.
I plan to use the GlobalContext or ThreadContext for building the dataset.
My idea was to hook into Log4Net and attach to an event I would imagine, to
alter the message pattern to include contexts. But I can't find any event
that would help me, perhaps there also might be a easier way?
What do you think about the overall design of this, am I on the right track
or am I missing something?
If this way is good, how can I implement it?
--
View this message in context: http://www.nabble.com/Log4net%3A-context-only-for-exception-tp24091804p24091804.html
Sent from the Log4net - Users mailing list archive at Nabble.com.