나는 많은 웹 페이지와 일부 WCF 서비스가 포함 된 웹 사이트를 운영하고 있습니다.log4net과 IHttpModule을 WCF 서비스와 함께 사용
MDC.Set("path", HttpContext.Current.Request.Path);
string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if(string.IsNullOrWhiteSpace(ip))
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
MDC.Set("ip", ip);
이 모듈은 내 영문 페이지에 잘 작동 :
나는 PreRequestHandlerExecute에 가입하고 다음과 같은 log4net MDC 변수의 수를 설정 로깅 IHttpModule 있습니다.
모듈을 WCF와 함께 사용하려면 web.config에서 aspNetCompatibilityEnabled = "true"를 설정하고 RequirementsMode = AspNetCompatibilityRequirementsMode를 서비스에 설정하십시오.
그러나 서비스 메소드가 호출 될 때 MDC는 더 이상 설정된 값을 포함하지 않습니다. PreRequestHandlerExecute에 로깅 메서드를 추가하여 설정 중인지 확인했습니다.
로그에서 PreRequestHandlerExecute 핸들러 메서드를 볼 수 있고 서비스 메서드 호출이 별도의 스레드에 있기 때문에 MDC가 값을 잃어 버리고 있다고 생각합니다.
게시물이 log4net using ThreadContext.Properties in wcf PerSession service 인 경우 log4net.GlobalContext를 사용하는 것이 좋지만 두 사용자가 동시에 모든 응용 프로그램에서 GlobalContext를 공유하는 경우 문제가 발생한다고 생각합니다.
이 방법을 사용할 수 있습니까?
당신의 솔루션은 훌륭하게 작동했습니다. 감사합니다. Global.asax의 Application_Start 핸들러에 모든 GlobalContext 속성을 설정했습니다. – Aaron0