2011-01-05 5 views
4

안녕하세요 저는 WCF의 IIS 호스팅 서비스에서 Log4Net을 사용하려고하지만 모든 데이터를 기록하지 않습니다. Log4Net을 사용하여 WCF 서비스에 로그인하는 사람이 있습니까?W4F의 Log4Net이 작동하지 않습니다.

+0

나열된 오류가 있는지 확인하기 위해 configuration..check eventvwr을 설정 한 방법으로 함께 할 수있는 뭔가가 있어야합니다 ..lof4net 설정을 지정한 곳도 있습니다. – Mahesh

답변

7

자체 호스팅 된 WCF 응용 프로그램 내에서 내 프로젝트에서 log4net을 사용하고 있습니다.

설정 단계는 매우 간단합니다.

  1. 추가 참조가 우리의 콘솔 서비스 호스트 프로젝트에 log4net.dll하는 (우리의 응용 프로그램의 진입 점)
  2. 위 프로젝트의 AssemblyInfo.cs 파일에 다음 줄을 (추가하는 사용자 지정 log4net 설정 파일을 지정할 수 있습니다 ., 어떤 log4net 업데이트가 빠른 "보고"하지만 것이다 아마 조금 더러운 ..)

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

  3. 프로젝트를 콘솔에 log4net.config 파일을 추가하고이 (출력 디렉토리에 파일 속성을 복사 " 출력 디렉토리로 복사 "

    private static readonly log4net.ILog Logger = 
    log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
    
  4. 로그인이 필요 :

    당신이
  5. 로깅이 필요한 경우)

  6. 하면 로깅을 필요로하는 클래스의 개인 정적 구성원으로 로거를 선언 모든 프로젝트에 log4net.dll 참조를 추가합니다

    Logger.Info("Starting console service host");

이 문서의 페이지 retty 많이 그것을 커버 : http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

+1

IIS 호스팅 WCf 서비스를 사용해 보셨습니까? – RockWorld

+0

Afaik에서는 IIS에서 호스팅 할 때이 기능이 작동하지 않습니다. Log4net은 설정 파일을 찾지 못할 것입니다 ... –

+0

@Stefan - IIS에서 저를 위해 일했습니다. 그러나 log4net.config에는 VS에 설정된 "copy to output directory"가 있어야합니다. 즉, log4net.config는 IIS에서 배포 된 위치의 'bin'폴더에 있어야합니다. – codeulike

0

log4net 구성 파일에 대한 올바른 디렉토리를 확인하지 않기 때문에 log4net을 구성하는 어셈블리 특성을 사용하여 작동하지 않습니다. 어쩌면 당신은 설정 파일을 지정할 때 상대 경로를 사용하려고 시도 할 수 있지만 제안 된 해결책 중 하나를 사용하는 것이 더 쉽습니다. here. I는 MSMQ에 log4net 사용하고

0

내가 의존성 주입해서 Ninject를 사용 IIS 7에서 호스팅 WCF 서비스를 활성화 을 Ninject.Extensions.Wcf, Ninject.Extensions.Logging.log4net NuGet 패키지를 설치 log4net 구성 부를 첨가 Web.config 파일.

사람들이 Global.asax에 log4net 초기화 코드를 추가하는 것을 제안했지만, 이는 내가 알 수있는 한 MSMQ 활성화 서비스에 대해서는 작동하지 않습니다. 그러나 Ninject는 웹 응용 프로그램 시작시 초기화 코드를 실행할 수있는 WebActivator 패키지를 설치합니다. Ninject는 App_Start \ NinjectWebCommon.cs에 코드를 삽입합니다. log4net을 구성하려면 Start 메소드에 코드를 추가해야합니다. 광산은 다음과 같습니다

public static void Start() 
{ 
    DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); 
    DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); 

    // configure log4net 
    XmlConfigurator.Configure(); 

    bootstrapper.Initialize(CreateKernel); 
} 
1

입니다 조심해야 할 또 다른 것은 당신이 당신의 WCF 엔드 포인트에 별도의 어셈블리에 정의 된 사용자 지정 WCF ServiceHostFactory이있는 경우 (예를 들어 DRY 유지) 후 공장입니다 정의 된 어셈블리를 log4net의 관점에서 "루트"어셈블리와 해당 어셈블리에서 XmlConfigurator 속성을 선언해야합니다.

이 FAQ http://logging.apache.org/log4net/release/faq.html#trouble-webapp-stops-logging 및 링크 된 의견은 log4net 가능한 빨리 초기화하고 싶어 설명

관련 문제