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.