我正在嘗試使用NLog記錄系統中的某些內容。這是一個非常複雜的系統,在不同地方使用消息隊列進行多線程。NLog - 擴展Nlog - callsite - dispose()
我們需要擴展NLog來記錄我們需要的其他項目。 擴展NLog之後,我們發現callsite信息是錯誤的。 Stack上的一些搜索給了我一個解決方案。 我現在擔心的是,隨着我們所做的擴展(傳遞TypeName),我們可能會有幾百個日誌實例,並且我很不情願這樣做會非常快速地備份。
我沒有看到NLog的dispose方法,所以我不知道垃圾回收會如何挑選它。
如果我有100個班,每個在不同的線程處理1000個事務第二運行,並且每個這些被記錄,並創建一個新的日誌實例,我看到我的未來問題。
我很樂意提供建議。請讓我知道這是否會成爲問題,如果有的話,可能的解決方案?
編輯:添加代碼: - 這裏是ExtenderClass(取類名)
private readonly Logger _logger;
public NLogLogger(Type t)
{
_logger = LogManager.GetLogger(t.FullName);
}
public void Trace(string message, string systemUserID, string transactionID, string description)
{
if (_logger.IsTraceEnabled)
{
Write(LogLevel.Trace, message, systemUserID, transactionID, description);
}
}
下面是一個使用它的類 - 這個類將在實例爲每個線程任務,所以也許500忙碌的一天。
public class ThreadTask : TaskBase
{
private readonly NLogLogger _logger = new NLogLogger(typeof(ThreadTask));
public Method(string val)
{
_logger.Trace(message);
}
}
是的,你是對的。但我擴展nLog,所以我有一個基類。我必須將該類型傳遞給基類以使該調用點正確。 – bugnuker 2012-04-26 19:53:04
我不明白你有什麼問題。你爲什麼要有幾百個日誌實例?通過聲明你的記錄器類似於我上面說明的方式(考慮到你已經記錄了記錄器的事實),你應該在你的應用程序中爲每個類記錄一個實例。因此,如果您有1個類(將記錄器作爲靜態成員)並且創建了100個類的實例,則只有1個記錄器實例。你能發表一些代碼來展示你如何在你的類中聲明和創建記錄器嗎? – wageoghe 2012-04-26 21:08:32
在原始問題中增加了代碼 – bugnuker 2012-04-26 22:50:16