문제

Log4Net으로 로깅할 때 로그를 호출하는 클래스를 로그 파일에 넣는 것은 매우 쉽습니다.나는 과거에 이것이 코드를 추적하고 클래스 전체의 흐름을 보는 것을 매우 쉽게 만든다는 것을 발견했습니다.Log4Net에서는 다음과 같이 변환 패턴에서 %logger 속성을 사용합니다.

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

그리고 이것은 내가 원하는 결과를 제공합니다.

2008-09-19 15:40:26,906 [3132] ERROR <b>Log4NetTechDemo.Tester</b> [(null)] - Failed method

출력에서 로그를 호출한 클래스가 Log4NetTechDemo.Tester라는 것을 알 수 있으므로 해당 클래스에 대한 오류를 매우 쉽게 추적할 수 있습니다.

Logging Applicaton Block에서는 간단한 로그 호출로는 이 작업을 수행하는 방법을 알 수 없습니다.어떻게 할 수 있는지 아는 사람 있나요?그렇다면 그렇게 하기 위한 예나 단계가 매우 도움이 될 것입니다.

도움이 되었습니까?

해결책

LogEntry의 ExtendedProperties 사전에 호출 메소드를 추가하십시오.물론 포맷터 템플릿에서 ExtendedProperties 토큰을 제거하지 않았다고 가정합니다.

로깅 래퍼에 다음과 같은 내용을 넣으세요.

public void LogSomething(string msg)
{
  LogEntry le = new LogEntry { Message = msg };
  le.ExtendedProperties.Add("Called from", new StackFrame(1).GetMethod().ReflectedType);
  Logger.Write(le);
}

이것을 호출하면 로그 끝에 다음과 같은 내용이 생성됩니다.

Extended Properties: Called from - LAB_Demo.Tester

다른 팁

StackTrace를 사용하지 않고는 쉬운 방법을 찾지 못했습니다.예외인 경우 다음에서 가져옵니다.

 StackTrace trace = new StackTrace(ex, true);
 StackFrame frame = trace.GetFrame(0);

수다스러운 항목의 경우 문자열만 작성합니다.삽입 시 클래스 이름을 가져올 수 있는 조각이 있습니다.또한 클래스 이름으로 const 문자열을 선언합니다.

예쁘지는 않지만 우리가 찾은 것 중 최고입니다.다른 사람이 이 스레드에 대한 답을 갖고 있기를 바랍니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top