Here's some sample code from my application:

The need here was to generate a separate log file for each device
connection.  Override of ILog allows separate message data string to be
passed when calling the logging functions and then added as a property.

Each connection adds its own appender with unique file name and NDC
filter.  Logging by each connection uses NDC.  So each connection's
appender filters for its own entries and directs them to the proper
file.

In application config file I send all entries to the debug screen.
There could also be another file which logs all entries.

Some default settings are stored in the application config file for use
in configuring each appender.


/// <summary>
/// dataLog
/// </summary>
protected static readonly IDeviceCommunicationsLog dataLog =
DeviceCommunicationsLogManager.GetLogger("LIS3.Data");


Each connection adds and removes a file appender programmatically:

/// <summary>
/// add connection specific appender
/// </summary>
void AddAppender()
{
        // check if logging is endabled
        if( this.IsLoggingEnabled() )
        {
                try
                {
                        // get the interface
                        IAppenderAttachable connectionAppender =
(IAppenderAttachable)this.DataLog.Logger;
                        // need some application configuration settings
                        NameValueCollection appSettings =
ConfigurationSettings.AppSettings;
                        // get the layout string
                        string log4netLayoutString =
appSettings["log4net.LIS3.LayoutString"];
                        if( log4netLayoutString == null )
                        {
                                // use default setting
                                log4netLayoutString = "%d [%x]%n   %m%n
%P{MessageData}%n%n";
                        }
                        // get logging path
                        string log4netPath =
appSettings["log4net.Path"];
                        if( log4netPath == null )
                        {
                                // use default path
                                log4netPath = ".\\";
                        }
                        // create the appender
                        this.rollingFileAppender = new
RollingFileAppender();
                        // setup the appender
                        this.rollingFileAppender.MaxFileSize = 10000000;
                        this.rollingFileAppender.MaxSizeRollBackups = 2;
                        this.rollingFileAppender.RollingStyle =
RollingFileAppender.RollingMode.Size;
                        this.rollingFileAppender.StaticLogFileName =
true;
                        string appenderPath = LogSourceName + ".log";
                        // log source name may have a colon - if so
replace with underscore
                        appenderPath = appenderPath.Replace( ':', '_' );
                        // now add to log4net path
                        appenderPath = Path.Combine( log4netPath,
appenderPath );
                        // update file property of appender
                        this.rollingFileAppender.File = appenderPath;
                        // add the layout
                        PatternLayout patternLayout = new PatternLayout(
log4netLayoutString );
                        this.rollingFileAppender.Layout = patternLayout;
                        // add the filter for the log source
                        NDCFilter sourceFilter = new NDCFilter();
                        sourceFilter.StringToMatch = this.LogSourceName;
                        this.rollingFileAppender.AddFilter( sourceFilter
);
                        // now add the deny all filter to end of the
chain
                        DenyAllFilter denyAllFilter = new
DenyAllFilter();
                        this.rollingFileAppender.AddFilter(
denyAllFilter );
                        // activate the options
                        this.rollingFileAppender.ActivateOptions();
                        // add the appender
                        connectionAppender.AddAppender(
this.rollingFileAppender );
                }
                catch( Exception x )
                {
                        this.ErrorLog.Error( "Error creating LIS3 data
log appender for " + LogSourceName, x );
                }
        }
}
/// <summary>
/// remove connection specific appender
/// </summary>
void RemoveAppender()
{
        // check if we have one
        if( this.rollingFileAppender != null )
        {
                // cast to required interface
                IAppenderAttachable connectionAppender =
(IAppenderAttachable)this.DataLog.Logger;
                // remove the appendier
                connectionAppender.RemoveAppender( rollingFileAppender
);
                // set to null
                this.rollingFileAppender = null;
        }
}


-----Original Message-----
From: David Elliott [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, May 25, 2004 11:19 AM
To: [email protected]
Subject: Question on SDK Classes

I like taking programs apart in order to understand how they work.
There 
aren't alot of examples
for me to disect, so I must ask some of these questions.  If anyone has
more 
advanced demos they
would care to share, I would appreciate it.

I have Looked through the SDK and have traversed the ILog structure that
is 
returned from the
LogManager.GetLogger() method using intellisense.

Are the majority of these SDK classes primarily if you are creating a
custom 
logger/appender/repository?

In traversing the ILog structure, there doesn't seem to be a way to
affect 
the logger once it is
created, other than modifying the XML file.  For instance,
programatically 
changing the output
format of the date from ABS_TIME_DATE_FORMAT to ISO8601_DATE_FORMAT.

Am I wrong?  Don't know why I would want to do this.  Just trying to
find 
out everything I can.

Thanks,
Dave

_________________________________________________________________
Get 200+ ad-free, high-fidelity stations and LIVE Major League Baseball 
Gameday Audio!
http://radio.msn.click-url.com/go/onm00200491ave/direct/01/



Reply via email to