장기간 비동기 작업을 트리거하는 웹 요청을 받아들이는 Windows 서비스가 있습니다. 나는 각 작업이 다른 디렉토리 (요청 ID와 작업을 트리거 한 사용자에 의해 결정되는 이름)로 로그를 출력하기를 원합니다. 각 디렉토리 안에는 여러 개의 로그 파일이 있습니다.여러 폴더에 로깅
Common.Logging 및 log4net을 사용하고 있습니다. 그러나 log4net 구성을 (아래 주어진대로) 디렉토리를 변경하기 위해 재설정해야하고, 다른 작업이 아직 실행중인 동안 작업이 트리거되는 경우이 작업은 제대로 작동하지 않습니다. 두 작업의 로그가 생성 된 최신 디렉토리로 변경됩니다.
protected ILog CreateLoggerInstance(string loggerName, string logFolder)
{
logFolder += "/";
// This is a hack to avoid creation of a folder called (null), because of limitation in log4net.
// More details: https://github.com/net-commons/common-logging/issues/81
log4net.GlobalContext.Properties["LogsDirectory"] = logFolder;
this.LogInstance = LogManager.GetLogger(loggerName);
this.LogInstance.GlobalVariablesContext.Set("LogsDirectory", logFolder);
LogManager.Reset();
this.LogInstance = LogManager.GetLogger(loggerName);
this.LogFolder = logFolder;
return this.LogInstance;
}
특정 로거에 대해서만 로그를 설정하는 방법이 있습니까? 또는 Reset()을 피할 수 있습니까? 또한이 특정 코드는 log4net을 언급하는 유일한 곳입니다. 따라서 각 로그 세트에 대해 여러 폴더를 만들 수 있다면 NLog로 이동할 수 있습니다.
편집 : - https://github.com/NLog/NLog/wiki/Configure-component-logging
을하지만 Common.Logging가 지원하는 것처럼은 보이지 않는 내가 NLog에서이 기능을 발견했습니다.
를 참조하십시오 동시에 위치별로 파일 첨부기를 하나씩 필요로합니다. 또 다른 대안은 로거 생성을 중심으로 잠금을 사용하는 것인데, 이는 성능에 해로울 수 있습니다. – stuartd