gpt4 book ai didi

c# - 配置 log4net 记录器以匹配通用类

转载 作者:行者123 更新时间:2023-12-03 08:09:57 25 4
gpt4 key购买 nike

我想在我的应用程序中配置一个类以在调试级别进行记录,因此我正在尝试为该类设置一个特定的记录器。不过,它并没有更改为调试级别,我怀疑这是因为该类是通用的。我找到了 some examples泛型类型的配置,所以它看起来是可能的,但它对我不起作用。

<root>
<level value="INFO" />
<appender-ref ref="OutputDebugStringAppender"/>
</root>
<logger name="MyCompany.MyGenericClass`1">
<level value="DEBUG"/>
</logger>

下面是我在通用类中声明记录器的方式。

public abstract class MyGenericClass<T> : IDisposable where T : class
{
private static ILog _log = LogManager.GetLogger(typeof(MyGenericClass<T>));

最佳答案

看起来有two ways to get the class name ,其中之一在记录器中更容易配置。

如果您将我的记录器声明更改为:

public abstract class MyGenericClass<T> : IDisposable where T : class
{
private static ILog _log = LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

然后我原来的配置就可以工作了:

<root>
<level value="INFO" />
<appender-ref ref="OutputDebugStringAppender"/>
</root>
<logger name="MyCompany.MyGenericClass`1">
<level value="DEBUG"/>
</logger>

听起来 `1 指的是该类型具有的泛型参数的数量,但我不确定。

如果您使用我的原始记录器声明:

public abstract class MyGenericClass<T> : IDisposable where T : class
{
private static ILog _log = LogManager.GetLogger(typeof(MyGenericClass<T>));

然后你需要使用这个丑陋的配置:

<logger name="MyCompany.MyGenericClass`1[[MyCompany.MyParameterClass, MyLibrary, Version=1.2.0.0, Culture=neutral, PublicKeyToken=65af8642211d1afa]]">
<level value="DEBUG"/>
</logger>

第二个选项也意味着您需要为泛型类的每个参数类型单独配置一个条目。

关于c# - 配置 log4net 记录器以匹配通用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com