Occasionly I'll recommend people "extend log4net and write your own
logger" if the default behaviour of log4net doesn't do what they need.
The usually routine is to post a link to this page:

 http://cvs.apache.org/viewcvs.cgi/logging-log4net/extensions/net/1.0/

The examples on that page are well written and well documented. If you
need something even simpler, take a look at the code below. I've
implemented a VerySimpleLogger that contains only two log methods:
Trace and Alert. Log4net has support for a lot of other log levels
besides the familiar Debug, Info, Warn, etc. Here's a sample usage:

 log4net.Config.XmlConfigurator.Configure();

 static VerySimpleLogger log = LogManager.GetLogger("Class1");

 log.Trace("Hello World");
 log.Trace(1234, "Hello World");
 log.Alert("Hello World");

The VerySimplerLogger class is "faster" than ILog becuase you're making
calls to a sealed concrete class rather than an interface. For
maintainability, I'd recommend using the standard ILog interface
whenever possible.

public sealed class LogManager
{
 private static readonly WrapperMap s_wrapperMap = new WrapperMap(
  new WrapperCreationHandler(WrapperCreationHandler));

 private LogManager()
 {
                        
 }

 public static VerySimpleLogger GetLogger(string name)
 {
  return (VerySimpleLogger)s_wrapperMap.GetWrapper(
   LoggerManager.GetLogger(Assembly.GetCallingAssembly(), name));
 }

 private static ILoggerWrapper WrapperCreationHandler(ILogger logger)
 {
  return new VerySimpleLogger(logger);
 }
}

public sealed class VerySimpleLogger : LoggerWrapperImpl
{
 private readonly static Type declaringType = typeof(VerySimpleLogger);

 public VerySimpleLogger(ILogger logger) : base(logger)
 {

 }

 public void Trace(string message)
 {
  Logger.Log(declaringType, Level.Trace, message, null);
 }

 public void Trace(int id, string message)
 {
  LoggingEvent loggingEvent = new LoggingEvent(
   declaringType, 
   Logger.Repository, 
   Logger.Name, 
   Level.Trace, 
   message, 
   null);

  loggingEvent.Properties["id"] = id;
                        
  Logger.Log(loggingEvent);
 }

 public void Alert(string message)
 {
  Logger.Log(declaringType, Level.Alert, message, null);
 }
}

Reply via email to