Hi,

Despite what you have been told already I have wrapped log4net, if you
do it right it is fine imho.

I wrapped log4net since we need to consume it in scenarios where we
absoloutely cannot have a plethora of config files kicking around all
the time simply to enable some logging in the consuming components.

For instance, what if you want to log from an SSIS pipeline?  You
absolutely do not want to generate dependencies on config files in such
situations.  This is also why I had a nightmare of a time getting
log4net configured using pure C# because it just doesn't seem to be done
all that often so isn't documented (I'm working on some docs for that
scenario to share).

The way I got around the log source problem was to use method signatures
like this on my wrapper class:

Log.Debug(Type sender, string message)

Then inside the wrapper it is a simple task to request the ILog from
log4net using the Type parameter, no need to walk the stack.

Works for us anyway ...

Cheers,

James.

-----Original Message-----
From: xalex [mailto:[email protected]] 
Sent: 18 July 2009 21:54
To: [email protected]
Subject: Wrapping Log4Net


Hi forum,

I would like to use log4net in a large .net development. because i have
the
requirement to prepare a potential replacement of the log4net framework
e.g.
against ms-enterprise library or against a newer version of log4net, i
would
like to wrap this. My way to do it is straight forward: 
A single assembly references the log4net framework, offes the ILog and
LogManager classes, and all other projects reference only this wrapper
(see
below).

This wrapper allows me to restrict the users on only the main functions
which are really needed and allows me to replace this framework,
potentially.

Now my question: When the ILog.Debug() Method is called, the output in
the
logfile is wrong, because the LocationInfo used for this output
corresponds
to the Wrapper and not to the code from which it is really called :-(

A: Is there an easy way to fix this problem?
B: Is there a better idea to wrap log4net
C: Is it true, that logging is only possible in DEBUG-Builds? When using
the
release build, i dont get any output

Thanks 
Alex



Wrapper:
------------
    public interface ILog
    {
        bool IsDebugEnabled { get; }
        bool IsErrorEnabled { get; }
        bool IsFatalEnabled { get; }
        bool IsInfoEnabled { get; }
        bool IsWarnEnabled { get; }

        void Debug(object message);
        void Error(object message);
        void Fatal(object message);
        void Info(object message);
        void Warn(object message);
    }

    public static class LogManager
    {
        static LogManager()
        {
            XmlConfigurator.Configure( new
System.IO.FileInfo("c:/logger.xml")) ;
        }

        public static ILog GetLogger(Type type)
        {
            MyLog log = new MyLog(log4net.LogManager.GetLogger(type) );
            return log;
        }
    }

    public class MyLog :ILog
    {
        private log4net.ILog _log;

        public MyLog(log4net.ILog log) 
        {
            _log = log;
        }

        #region ILog Members

        public bool IsDebugEnabled
        {
            get { return _log.IsDebugEnabled; }
        }

        
        public void Debug(object message)
        {
            _log.Debug(message);
        }

   ...
}

-- 
View this message in context:
http://www.nabble.com/Wrapping-Log4Net-tp24551728p24551728.html
Sent from the Log4net - Users mailing list archive at Nabble.com.


scanned by MessageLabs [www.messagelabs.com]


Reply via email to