你不需要事先定义每个记录器。相反,传统的方法是使用一个标准模式来使用反射在消费类中声明log4net记录器的Type
。只需将此属性放入每个类中即可开始:
private static log4net.ILog _logger;
private static log4net.ILog Logger
{
get
{
if( _logger == null )
{
Type type = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
_logger = log4net.LogManager.GetLogger( type );
}
return _logger;
}
}
private static ILog logger =
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
这两种方法都可以配置一个记录器。使用反射来获取当前方法的类名,然后将其用作记录器名称,因此称之为“动态”。这也可以编码为以下形式(但是每个类中的代码将不同,并且反射方法使其易于作为片段完成)。
private static ILog logger = LogManager.GetLogger(typeof(MyCurrentClass));
private static ILog logger = LogManager.GetLogger("whatever I want");
您所包含的链接不仅创建了一个ILog记录器,还创建了一个附带的appender。我认为这并不是一个好的做法,因为可以更容易地在web.config或app.config中运行时配置appenders,并且通常不需要有超过一个或两个appenders,所有记录器输出都应该发送到appenders。