Add a null logger implementation
--------------------------------

                 Key: LOG4NET-326
                 URL: https://issues.apache.org/jira/browse/LOG4NET-326
             Project: Log4net
          Issue Type: Improvement
          Components: Core
            Reporter: Carl Raymond
            Priority: Minor


Please consider adding a null logger implementation to log4net.  This would be 
an implementation of ILog where all logging method do nothing and all 
IsXxxEnabled methods return false.  This supports Dependency Injection and unit 
testing patterns.  By providing a do-nothing implementation of ILog, it is 
easier to move creation of a real logger via LogManager.GetLogger(...) outside 
of the logging class, and into the DI container configuration.  Because this 
class is inherently thread-safe, a singleton is appropriate.  Note that this 
class would never be returned by LogManager.GetLogger().  It exists to serve as 
a default value for a read/write property of type ILog.

Use case: A client project with class Thing that (optionally) logs has a 
property of type ILog, where the default value of the property is the null 
logger.  The property can be set to another logger by the DI container in 
production, or set to a mock ILog by a testing framework.

Code:
public class Thing
{
private ILog _myLogger = log4net.NullLogger.Instance;
public ILog MyLogger
        {
                get { return _messageLogger; }
                set { _messageLogger = value; }
        }

public SomeMethod()
        {
                // do some work...
                MyLogger.Info("message");
        }
}

The advantage of using a null logger as the property's default value is that 
the logging class does not need to wrap all calls to the logger with null 
checks.

In a unit testing situation, it is not necessary to activate log4net at all.  
When the test at hand tests logging behavior, the test code would set the 
property to a mock ILog implementation, which would then verify that the 
appropriate method was called.  Other tests not involving logging do not need 
to set a value on the property.



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to