Loading...

log4net-user@logging.apache.org

[Prev] Thread [Next]  |  [Prev] Date [Next]

RE: Building A Custom Logger Vanderkolk, John Thu Jul 19 12:01:19 2007

The cleanest way of doing this would be to implement your own
LogManager. However if you really don't want to do that and want to just
have your IInterface and InterfaceImpl, the best way I see would be to
make sure your InterfaceImpl constructor is public and use log4net's
LogManager to get an ILog, and use its ILogger to initialize your
InterfaceImpl:
 
    IInterface _logger = new
InterfaceImpl(log4net.LogManager(typeof(MyClass)).Logger);
 
A cleaner way would be to add a new constructor to your InterfaceImpl:
 
    public InterfaceImpl(Type type) : base
(log4net.LogManager.GetLogger(type).Logger) { }
 
so that you can do this:
 
    IInterface _logger = new InterfaceImpl(typeof(MyClass));
 

John VanderKolk 

 


The contents of this e-mail are intended for the named addressee only. It 
contains information that may be confidential. Unless you are the named 
addressee or an authorized designee, you may not copy or use it, or disclose it 
to anyone else. If you received it in error please notify us immediately and 
then destroy it.


From: Kevin Parkinson [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, July 17, 2007 7:04 PM
To: [EMAIL PROTECTED]
Subject: Building A Custom Logger


Has anyone had experience building a custom logger?

Here is what I am doing. I have created my own interface describing what
the kinds of things a logger needs to be able to log in my environment
(let's call it IInterface) like security audits, performance statistics,
etc. This interface extends ILog as well. 
Thus: IInterface : ILog

Then, I have an implementation of IInterface and we'll call that
InterfaceImpl which also inherits from LogImpl (in order to satisfy the
ILog interface).
Like so: InterfaceImpl : LogImpl, IInterface 

Now, when I go to put a logger in a class in which I want to perform
logging, by default I would usually put the line of code:
ILog _logger = LogManager.GetLogger(typeof(MyClass));

What I would like to do is to be able to say: 
IInterface _logger = LogManager.GetLogger(typeof(MyClass));

...but this does not work (nor does anything else I have tried) because
GetLogger returns LogImpl which knows nothing of my IInterface. 

Can anyone recommend anything that I can try without needing to modify
the LogManager (a sealed class)?