2013-03-13 58 views
2

我想在我的應用程序中配置一個類以在調試級別進行日誌記錄,所以我試圖爲該類設置特定的記錄器。不過,它並沒有改變到調試級別,我懷疑這是因爲這個類是通用的。我發現配置爲泛型類型的some examples,所以它看起來可能,但它不適合我。配置log4net記錄器以匹配通用類

<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>)); 

回答

3

它看起來像有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> 

第二種選擇也意味着你需要爲每個參數單獨配置條目泛型類的類型。