어떤 싸움 후 ...를 GAC (글로벌 Assymbly 캐시)가 발명 된 이유의 하나가 복수를 사용하는 것을 말하며
시작할 수 있습니다 (u는 이야기를 싶지 않는 경우 바로 아래의 코드를 복사) 같은 장소에있는 dll 버전.
so..i NLog2.0에 의존하는 dll로 두 번째 솔루션을 추가해야하는 NLog 2.0과 Sharepoint 프로젝트가 있습니다. 문제는 GAC로 모두 푸시 한 후입니다 (SafeControls에 대한 것입니다 - sp dev에 해당). 로거가 새로운 솔루션에 로그인 한 적이 없다는 것입니다.
난 내 Web.config를 다시 보았을 때 고리 종
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c" />
을 주목 버전 = 내가 NLog 그냥 이전에 대한 구성을로드하도록 얻었다 2.0.0.0
그럼 proj 그리고 어떻게 든 3.2 dll을 사용하기 시작하면 그것을 지나치지 않습니다.
또한 DeepCopy를 사용하여 구성을 다시로드하려고 시도했지만 그 이유는 알지 못합니다.
그런 다음 코드에서 LoggingConfiguration
을 다시 정의하여 이전 구성을 저장하고 해당 클래스에 로그인 한 다음 소멸자에서 다시 반복하여 이전 구성으로 다시 초기화하는 동안 로거를 다시 초기화합니다.
로거가 2.0 환경 설정에서 모든 곳에서 3.2를 사용하고있는 것으로 추측됩니다.
그런데 나는 2 가지를 싫어했다 : 1 - 소멸자가있다, 2 - 웹에서 설정을 가지지 않았다.구성, 그리고 모든 그 해협 didnt 작업을 할려고 노력하고 로그와 함께 가끔은 약간의 지연이 있다는 것을 관찰했다 아마도 내가 아마 일부 큐 또는 뭔가 내가 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");
}
편집 : 일부 로그를 그리워 원인이 결국 그래서 나는 웹 설정이
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");
}
을 권장 마시는 무거운 사용, ctor에-Destrucor에 반환