2010-04-22 4 views
0

개발 과정에서 log4net을 사용하고 있습니다. 프로젝트 제약 조건의 일부로 전역 어셈블리 캐시에 추가해야합니다.Log4Net 및 GAC - 구성 파일을 참조하는 방법?

로깅 정의는 Log4Net.xml 파일에 있습니다. 이 파일은 내 assemblyinfo에서 [assembly : log4net.Config.XmlConfigurator (ConfigFile = "Log4Net.xml", Watch = true)]로 참조됩니다. xml 파일이 log4net.dll과 같은 디렉토리에 있으면 모든 것이 잘 작동합니다.

그러나 이제 log4net을 GAC에 추가 했으므로 XML 파일을 더 이상 선택하지 않습니다.

누구나 XML 파일을 다시 가져 오려면 변경해야 할 사항을 알고 있습니까? 어셈블리 참조에서 패치를 하드 코딩하는 것이 유일한 방법입니까?

많은 감사

답변

0

당신은 당신의 log4net.xml 파일이 "복사 항상"으로 설정되어 있는지 확인 수 (오른쪽 log4net.xml을 클릭 -> 속성 -> 항상 출력 디렉토리 = 복사에 복사). 구성 파일이 복사되는지 확인하려면 bin \ debug 또는 bin \ release 디렉토리를 점검하고 log4net.xml 파일이 응용 프로그램이 실행하는 디렉토리와 같은 디렉토리에 있는지 확인해야합니다.

그래도 문제가 해결되지 않으면 log4net에서 내부 디버깅을 활성화 해보십시오. 내부 디버깅을 사용하려면 app.config 파일에 다음 키를 추가하십시오. 그러면 내부 log4net 디버그 메시지가 Visual Studio 출력 창에 전송됩니다 (보기 -> 출력).

<configuration> 
    <appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

log4net 내부 디버깅에 대한 자세한 내용은, 당신은 필 Haack의 블로그 게시물 here를 확인할 수 있습니다.

다른 모든 방법이 실패하면 내부 디버깅을 사용하고 log4net의 XmlConfigurator.ConfigureAndWatch 메서드를 호출하여 구성을 명시 적으로로드 할 수 있습니다.

System.AppDomain.CurrentDomain.BaseDirectory 

응용 프로그램의 인쇄를 일부 파일에이 정보를하자 당신은 설정 파일을 배치해야합니다 어디에 당신은 알고

var fi = new FileInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\log4net.xml"); 
XmlConfigurator.ConfigureAndWatch(fi); 
+0

많은 분들과 스테판에게 감사 드리며, 두 분 모두 나에게 많은 옵션을 제공해 주셨습니다. 귀하의 게시물을 가져 주셔서 감사합니다. – Adam

3

log4net은 설정 파일에 의해 반환 된 경로에있을 것으로 예상하고있다.

물론 다른 해결책이 있지만 더 이상 특성을 사용할 수 없습니다. ConfigureAndWatch() 메소드를 직접 호출하면 설정 파일의 위치를 ​​직접 알 수 있습니다. 위치를 결정할 수도 있습니다 (하드 코딩 된 경로 일 필요는 없습니다).

관련 문제