一番激戰後...
,讓我們開始通過說的GAC(全球Assymbly緩存)被髮明的原因是1使用多個(如果u不想故事只是下面的代碼複製)版本的dll在同一個地方。
so..i有一個與NLog 2.0的Sharepoint項目,我需要添加第二個解決方案與dll依賴於NLog 3.2,問題是,在全部推向GAC後(對於開發人員來說,安全控制系統)記錄器從未登錄過新的解決方案。
當我在我的web.config又看了看圍着鍾
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c" />
通知的版本= 2.0.0.0
所以後來我得到了NLOG只是用來加載舊的配置proj,並以某種方式不會通過它時,開始使用3.2的DLL。
我也試圖重新加載配置,做DeepCopy,不能理解爲什麼沒有工作。
然後我在代碼中重新定義LoggingConfiguration
以重新初始化記錄器,同時保存舊的配置,登錄該類,然後重複在Destructor中重新初始化舊配置。
我猜測結果是記錄器現在在2.0配置中使用3.2。
但後來我討厭2件事:1 - 有一個析構函數,2 - 沒有從網絡配置。配置,並試圖做所有的海峽沒有工作,並觀察到有一些延遲有時與日誌我認爲有可能是一些隊列或我Finnaly什麼東西找到正確的方式來做一個CTOR,將知道重新初始化在NLOG適當:
public EncryptEventReceiver()
{
oldConfig = LogManager.Configuration;
Task t = new Task(() =>
{
FileTarget target = new FileTarget();
target.FileName = "c:\\Data\\Logs\\MyProj\\EncryptEventReceiver.txt";
target.Layout = "${message}";
target.Encoding = Encoding.UTF8;
LoggingRule rule = new LoggingRule("*", LogLevel.Trace, target);
LoggingConfiguration config = new LoggingConfiguration();
config.AddTarget("FileLog", target);
config.LoggingRules.Add(rule);
LogManager.Configuration = config;
var _logger = LogManager.GetCurrentClassLogger();
_logger.Trace("EncryptEventReceiver CTOR initialized Logger");
});
t.Start();
t.Wait();
LogManager.GetCurrentClassLogger().Trace("EncryptEventReceiver MIDDLE");
LogManager.Configuration = oldConfig;
nlog3 = LogManager.GetCurrentClassLogger();
nlog3.Trace("EncryptEventReceiver CTOR done, nlog3 ready");
}
編輯: 在引起了一些日誌,錯過了年底,所以我回到了CTOR-Destrucor,對於較重的使用喝Web的配置建議
public static Logger nlog3;
private static LoggingConfiguration oldConfig;
public EncryptEventReceiver()
{
oldConfig = LogManager.Configuration;
FileTarget target = new FileTarget();
target.FileName = "c:\\Data\\Logs\\MyProj\\EncryptEventReceiver.txt";
target.Layout = "${date:format=yyyy-MM-dd HH\\:mm\\:ss} ${level} ${message} ${exception:format=tostring}";
target.ArchiveAboveSize = 5242880;
target.ArchiveFileName = "c:\\Data\\Logs\\MyProj\\Archive_EncryptEventReceiver\\EncryptEventReceiver_${shortdate}_{#}.txt";
target.Encoding = Encoding.UTF8;
LoggingRule rule = new LoggingRule("*", LogLevel.Trace, target);
LoggingConfiguration config = new LoggingConfiguration();
config.AddTarget("FileLog", target);
config.LoggingRules.Add(rule);
LogManager.Configuration = config;
nlog3 = LogManager.GetCurrentClassLogger();
nlog3.Trace("EncryptEventReceiver CTOR done, nlog3 ready");
}
~EncryptEventReceiver()
{
nlog3.Trace("EncryptEventReceiver Destructor");
LogManager.Configuration = oldConfig;
LogManager.GetCurrentClassLogger().Trace("EncryptEventReceiver Destructor done");
}