2013-10-21 10 views
3

현재 로깅 명령을 줄이려고합니다. 현재 양식에서 기존 프로젝트에 쉽고 효율적으로 구현할 수있는 방법을 만들기가 어려울 수 있습니다. (jcldebug 이전/호출 방법의 이름을 얻으십시오.

2013 10 18 15.33.17.383 [FATAL] # [01290458] UTestMain.TFormMainTest.TitelGridRows (Line 229, "UPTestMain.pas") # Actual Log Message 

그래서 내 JCL 기반 CurrentFunctionName-방법 퍼팅에 대해 생각 : 나의 현재의 표준 로그 명령은 다음과 같습니다

logger.Fatal(CurrentFunctionName+' Grid beschriften:'); 

을 그리고 이것은 출력이 어떻게 보이는지 예입니다 .GetLocationInfoStr (Caller (1)))를 로거 단위로 직접 호출합니다. 작동했지만 의도 한 기능으로 인해 로거 단위 내의 메소드에 대한 정보 만 제공했습니다. 이것은 내가 그것을 할 수 있다고 생각하는 방법입니다,하지만 난 아직이 작업을 수행 할 수있는 올바른 방법을 우연히 발견되지 않은 : 나는 이름을 얻으려면 현재 메소드의 이름을 얻는 그래서 그 대신

procedure TLogger.Fatal(const AMsg : String); 
begin 
    log(TLevelUnit.FATAL, PreviousFunctionName + AMsg); 
end; 

을 이 로깅 커멘드의 호출이 발생한 이전의 메소드 디버그 정보가 충분해야한다고 생각합니다.하지만 현재로서는 어떻게 작동하는지 알 수 없습니다.

+1

JCL 예외 다이얼로그의 작동 원리 및 전제 조건을 살펴보십시오. 그런 다음 당신도 똑같이 할 수 있습니다. 하지만 빠를 것으로 기대하지 마십시오. 그렇지 않습니다. http://stackoverflow.com/questions/347365/ 및 http://pilif.github.io/2002/12/jcldebug/ –

답변

5

현재 함수 대신 호출자의 이름을 얻으려면 Caller을 호출 할 때 1 대신 2를 전달하십시오. 원하는만큼 호출 스택까지 이동할 수 있습니다.

+0

오늘 나는 caller에 대한 매개 변수에 대해 몇 가지 변경을 시도했습니다. 하지만 올바른 로그 파일을 확인하는 것이 엉망이 된 것 같습니다. 감사. – TheLax

관련 문제