2009-04-16 6 views
140

나는 항상 log4net을 사용하지만, 내가 결코 알아 내지 못했던 한 가지는 내부에서 일어나는 일을 알 수있는 방법입니다. 예를 들어, 프로젝트에 콘솔 appender와 데이터베이스 appender가 있습니다. 데이터베이스와 코드를 약간 변경했는데 이제는 데이터베이스 appender가 더 이상 작동하지 않습니다. 이유는 무엇인지 궁금해 하겠지만, log4net 내부에서 무슨 일이 벌어지고 있는지를 알면 많은 도움이 될 것입니다.log4net 문제를 추적하는 방법

log4net은 내 문제의 원인을 파악하기 위해 볼 수있는 모든 종류의 출력을 생성합니까? 당신은 출력이 같은 .config 파일에 다음 코드를 추가 할 수 있습니다 저장할 파일을 결정하기 위해, 그리고

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

:

답변

224

먼저 당신은 응용 프로그램 구성 파일에이 값을 설정해야 : 당신은 에서 자세한 설명을 찾을 수 있습니다

<configuration> 
... 

<system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
      <add 
       name="textWriterTraceListener" 
       type="System.Diagnostics.TextWriterTraceListener" 
       initializeData="C:\tmp\log4net.txt" /> 
     </listeners> 
    </trace> 
</system.diagnostics> 

... 
</configuration> 

은 '어떻게 내부 디버깅을 log4net을 사용할 수 있습니까?' log4net FAQ page

+7

응용 프로그램이 실행중인 프로세스가 로깅 텍스트 파일을 만들 경로 (위 예제에서 "C : \ tmp \ log4net.txt")에 대한 권한을 가지고 있는지 확인하십시오. – Jtrx

+0

이것이 누락되었습니다 팁 덕분에 내 애플에 무슨 일이 일어나고 있는지 확인해 주셔서 감사합니다. D – NFRiaCowboy

+2

내부 디버깅에 타임 스탬프가없는 것 같습니다 – snit80

15

위의 대답 외에도이 줄을 사용하여 c : \ tmp \ log4net.txt 출력 대신에 실시간으로 로그를 볼 수 있습니다.

log4net.Util.LogLog.InternalDebugging = true; 

예를 들어 콘솔 앱에서이를 추가 한 다음 실시간으로 출력을 볼 수 있습니다. 작은 테스트 장치에서 log4net을 디버깅하면 테스트중인 appender의 상황을 확인할 수 있습니다. 당신이 log4net 설정 파일을 사용하는 경우

24

당신은 또한에 최상위 노드를 변경하여 거기 디버깅을 할 수는 config 다시로드되면

<log4net debug="true"> 

이 작동하고 추적 수신기를 가정하고 설치가 제대로입니다 .

0

내부 로그가 충분한 정보를 제공하지 않는 경우 source code을 빌드하고 디버그하는 것은 매우 쉽습니다. 이것을 개발 프로젝트와 함께 사용하지 않으려면 메시지를 기록하고 프로젝트의 log4net.config을이 애플리케이션에 복사 한 다음 문제의 클래스를 디버깅하는 간단한 콘솔 애플리케이션을 추가하십시오.

0

진입 점이있는 루트 응용 프로그램이 log4net에 무엇인가를 기록하는지 확인하십시오. 다음 중 하나를 지정하십시오.

private static ILog logger = LogManager.GetLogger(typeof(Program)); 
static void Main(string[] args) 
{ 
    logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString()); 

2.0.8을 사용하여 흥미로운 상황이있었습니다. 필자는 라이브러리 프로젝트와 그 기능을 시연 할 수있는 테스트 exe 프로젝트를 만들었습니다. 라이브러리 프로젝트는 exe 프로젝트와 마찬가지로 Log4net을 사용하도록 설정되었습니다. exe 프로젝트는 configin을 등록하기 위해 assemblyinfo 속성을 사용했지만 콘솔이나 로그 파일에 로깅 출력을 얻지 못했습니다. log4net 내부 디버그 로깅을 켰을 때 콘솔에 기록 된 내부 메시지가 있지만 정상적인 로그는 남지 않았습니다. 오류는보고되지 않았습니다. 프로그램에 위의 코드를 추가하면 모두 작동하기 시작했습니다. 그렇지 않으면 Log4net이 올바르게 설정되었습니다.

관련 문제