logging-log4net-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From xalex <a...@pixafe.com>
Subject RE: Wrapping Log4Net
Date Tue, 21 Jul 2009 05:39:57 GMT

Hi James,

yes, this works of course, but there are 2 drawbacks: you need to request
the logger to the type for every single call. Instead of doing so, i would
like to instanciate as static variable per type only once like this:
private static readonly ILog logger = LogManager.GetLogger(typeof(Program));
The second (little) drawback is, that you have to provide the type for every
call.
I have a question: the call to the logger itself is done by your wrapper
code. How did you solve the problem, that the log4net.LocationInfo is wrong
in the logfile? I think also in your case the class, sourcefile and line
will be printed out of your wrapper and not the location of the application
code, right?

best regards
Alex





James Green-5 wrote:
> 
> 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:alex@pixafe.com] 
> Sent: 18 July 2009 21:54
> To: log4net-user@logging.apache.org
> 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]
> 
> 
> 
> 

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


Mime
View raw message