如何通过 class 名称检索我的自定义记录器并从多个位置输出实际的 class 名称?
How do I retrieve my custom logger by class name and output the actual class name from multiple places?
似乎可以接受以下语法来从 log4net 检索记录器:
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
因为它避免了对 class 日志记录的特定类型进行硬编码:
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
写入文件,以区分日志记录发生在代码中的位置。
如果您使用记录器的程序集名称,它将匹配。
由于您对 LogManager.GetLogger
的调用将搜索与 class 的完全限定名称匹配的记录器,如果您在配置中根据记录器命名,则可以将其与您的自定义记录器匹配到大会。
<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");
似乎可以接受以下语法来从 log4net 检索记录器:
var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
因为它避免了对 class 日志记录的特定类型进行硬编码:
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
写入文件,以区分日志记录发生在代码中的位置。
如果您使用记录器的程序集名称,它将匹配。
由于您对 LogManager.GetLogger
的调用将搜索与 class 的完全限定名称匹配的记录器,如果您在配置中根据记录器命名,则可以将其与您的自定义记录器匹配到大会。
<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");