我想我錯過了一些東西。我在類庫dll中寫了一個自定義的log4net appender,所以我想我應該通過這個來暴露log4net。通過這種方式,其他人只需添加攜帶log4net的單一日誌記錄類庫,即可獲得自定義appender。如何使類庫dll中的log4net可用?
我是否需要包裝log4net才能做到這一點,或者是否有其他方式公開它?
我想我錯過了一些東西。我在類庫dll中寫了一個自定義的log4net appender,所以我想我應該通過這個來暴露log4net。通過這種方式,其他人只需添加攜帶log4net的單一日誌記錄類庫,即可獲得自定義appender。如何使類庫dll中的log4net可用?
我是否需要包裝log4net才能做到這一點,或者是否有其他方式公開它?
我喜歡包裹的log4net併爲所有需要登錄入口提供單點。 例如。
我的界面會是這樣
public interface ICustomLogger : ILog
{
}
我的記錄器類將是這樣的。
public class CustomLogger : ICustomLogger
{
private ILog log4netLogger;
public TMALogger(ILog logger)
{
log4netLogger = logger;
}
//Plus all the methods that you would need to implement for ICustomLogger
}
LogManager會是這樣的。
public class LogManager
{
public static ICustomLogger GetLogger(Type type)
{
ICustomLogger logger = null;
try
{
ILog log4netLogger = log4net.LogManager.GetLogger(type);
CustomLogger customLogger = new CustomLogger(log4netLogger);
logger = customLogger;
}
catch (Exception ex)
{
logger = null;
}
return logger;
}
}
最後記錄器將在課堂上使用像
private readonly ICustomLogger _logger = LogManager.GetLogger(typeof(ClassName));
我希望這有助於。
如果你寫了一個appender,你需要做兩件事才能使用它:配置它(像其他appender一樣),並確保你的程序集被部署。
爲了配置它,你需要有地方在你的log4net的配置爲您的appender塊:
<appender name="YourCustomAppenderName" type="YourAssemblyNameSpace.YourAppenderType">
....
</appender>
在我的經驗,它工作時,你最好fully qualify程序集,但它不是絕對必要的。第二部分可以通過安裝程序來完成,但也許有點粗糙但很有效的方法是在應用程序中創建對appender程序集的引用。這種方式總會被複制到輸出目錄。
寫這個包裝並不是必要的。編寫一個包裝可能是有原因的,但是如果你希望能夠具有附加功能(例如接受附加參數的方法),就應該這樣做。包裝的另一個原因可能是你可以用別的東西代替log4net(儘管在更新所有配置文件時仍然會有一些工作)
我可以使用appender,但它在內部需要日誌記錄的所有項目中都很有用,所以看起來合乎邏輯的是可以將一個dll添加到項目中。 – jimconstable 2012-02-03 21:57:41
我同意將所有日誌記錄功能放在一個程序集中,但我絕不會考慮將log4net與我的DLL合併,或者在沒有任何理由的情況下編寫包裝程序。 – 2012-02-04 14:43:03
配置在這種情況下如何工作?你還在配置中引用log4net.Appender.ConsoleAppender還是它變成了customdll.Appender.ConsoleAppender? – jimconstable 2012-02-04 00:31:16
Config的工作原理與log4net相同。我仍然參考log4net.Appender.ConsoleAppender,配置部分不會有變化。 – Sumit 2012-02-04 04:56:24