从log4net检索记录器似乎接受以下语法:
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
因为它避免了必须硬编码类记录的特定类型:
var log = LogManager.GetLogger(typeof(MyClass));
我确实理解这一点,并且您也可以通过匹配名称来创建自己的记录器并使用该记录器 如:
var log = LogManager.GetLogger("MyCustomLogger");
使用配置:
<logger name="MyCustomLogger">
<level value="INFO" />
<appender-ref ref="ColoredConsoleAppender" />
</logger>
但是,如果我在其他地方也想要检索相同的记录器,但使用不同的名称:
var log = LogManager.GetLogger("SomeOtherPlace");
我该如何处理?
我想将MyCustomLogger
和SomeOtherPlace
写入文件,以区别于代码中记录发生的位置。
答案 0 :(得分:1)
如果您使用记录器的程序集名称,它将匹配。
由于您对LogManager.GetLogger
的调用将搜索与该类的完全限定名称匹配的记录器,因此如果您根据程序集在配置名称中记录了该记录器,则可以将其与您的自定义记录器匹配。
<logger name="My.Special.Assembly">
<level value="INFO" />
<appender-ref ref="ColoredConsoleAppender" />
</logger>
假设上述配置,以下代码将找到并使用您的记录器
namespace My.Special.Assembly.With
{
public class MyType
{
public MyType()
{
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
}
}
即,log4net将通过以下调用找到记录器My.Special.Assembly:
var log = LogManager.GetLogger("My.Special.Assembly.With.MyType");