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]
