List Info

Thread: Re: logging additional message-specific data with AdoNetAppender




Re: logging additional message-specific data with AdoNetAppender
country flaguser name
United States
2008-05-10 10:00:52
You can wrap ILog:

 ILogInfo log = new
LogInfo(LogManager.GetLogger(GetType()));

You can also write your own LogManager that calls the
"new LogInfo" code for you:

 ILogInfo log =
Company.Logging.LogManager.GetLogger(GetType());

You can set your custom properties on the specific
LoggingEvent object instead of on the thread itself:

// ILogInfo implementation
public void Info(int eventId, object message,
System.Exception t)
{
 if (this.IsInfoEnabled)
 {
  LoggingEvent loggingEvent = new
LoggingEvent(ThisDeclaringType, Logger.Repository,
Logger.Name, Level.Info, message, t);
  loggingEvent.Properties["EventID"] = eventId;
  Logger.Log(loggingEvent);
 }
}

That code was taken from:

http://svn.apache.org/viewvc/logging/log4net/trunk
/extensions/net/1.0/log4net.Ext.EventID/cs/src/EventIDLogImp
l.cs?view=co

----- Original Message ----
From: Chris Jerdonek <jerdonekgranicus.com>
To: Log4NET User <log4net-userlogging.apache.org>
Sent: Saturday, May 10, 2008 10:51:12 AM
Subject: RE: logging additional message-specific data with
AdoNetAppender

Thanks for your input, Peter and William.

What I'm leaning towards is making a simple wrapper of
LogManager and
ILog so that when I call GetLogger, I get a logger that
supports the
following syntax, where LogInfo is any class that implements
an ILogInfo
interface:

log.Debug(new LogInfo(1001, "Friendly message...",
"Stack trace..."));

ILogInfo has two methods Set and Unset which are meant to
set and unset
ThreadContext.Properties, along with a Message property. 
The logger's
Debug method, for example, is

public void Debug(ILogInfo info)
{
    info.Set();
    log.Debug(info.Message);
    info.Unset();
}

One nice thing is that I can easily make new ILogInfo
classes as
necessary, or create more constructors for the LogInfo
classes.
References to the ThreadContext.Properties string keys are
also
restricted to the ILogInfo classes they pertain to.

--Chris




--
Chris Jerdonek
Software Developer
P: (415) 357-3618 Ext. 1357
Granicus, Inc.

-----Original Message-----
From: William R. Daniels, Jr. [mailto:billgmcps.com] 
Sent: Friday, May 09, 2008 3:00 PM
To: Log4NET User
Subject: RE: logging additional message-specific data with
AdoNetAppender



> -----Original Message-----
> From: Chris Jerdonek [mailto:jerdonekgranicus.com]
> Sent: Thursday, May 08, 2008 7:49 PM
> To: log4net-userlogging.apache.org
> Subject: logging additional message-specific data with
AdoNetAppender
> 
> Hi, we've been using log4net for a few months now, and
I've been on
this
> list for about the same.  I have a design question.

> To implement this, it seems natural to store these
additional values
in
> ThreadContext.Properties, and then access them in the
Web.config via
(for
> example) %property.
> 

> Any thoughts?
> 
> Okay, thanks,
> --Chris
> 

Chris,
We do exactly what you have indicated.  In our programs we
set the extra
columns with ThreadContext and GlobalContext properties. 
Works pretty
well for us.  Here's our config for the appender:


<appender name="ADONetAppender_SqlServer"
type="log4net.Appender.ADONetAppender">
      <filter
type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <!-- <levelMax value="FATAL" />
-->
      </filter>
      <param name="BufferSize"
value="1" />
      <param name="ConnectionType"
value="System.Data.SqlClient.SqlConnection,
System.Data,
Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
      <param name="ConnectionString"
value="server=SERVER;database=DATABASE;integrated
security=SSPI;" />
      <param name="CommandText"
value="INSERT INTO TABLE
([Date],[Thread],[Level],[Logger],[Message],[Exception],[App
lication_Cat
egory],[Application_Name],[Server_Name],[Carrier_Name],[Data
Base_Name],[
Function_Name],[Message_Description]) VALUES (log_date,
thread,
log_level, logger, message, exception, category, application,
server, carrier, database, function,
mesgdescription)" />
      <param name="Parameter">
        <param name="ParameterName"
value="log_date" />
        <param name="DbType"
value="DateTime" />
        <param name="Layout"
type="log4net.Layout.RawTimeStampLayout" />
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="thread" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="255" />
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%t" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="log_level" />
        <param name="DbType"
value="String" />
        <param name="Size" value="50"
/>
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%p" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="logger" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="255" />
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%c" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="message" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="4000" />
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%m" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="exception" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="2000" />
        <param name="Layout"
type="log4net.Layout.ExceptionLayout">
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="category" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="100" />
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%P" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="application" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="100" />
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%P" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="server" />
        <param name="DbType"
value="String" />
        <param name="Size" value="50"
/>
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%P{log4net:HostName}"
/>
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="carrier" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="100" />
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%P" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="database" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="100" />
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%P" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="function" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="100" />
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%P" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName"
value="mesgdescription" />
        <param name="DbType"
value="String" />
        <param name="Size"
value="500" />
        <param name="Layout"
type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern"
value="%m" />
        </param>
      </param>
    </appender>

==============

Bill Daniels
Green Mountain Consulting, LLC

[1]

about | contact  Other archives ( Real Estate discussion Medical topics )