2012-12-29 2 views
0

로깅을 위해 매크로를 호출하는 타사 라이브러리가 있습니다. 이 매크로는 fprintf를 사용하여 로깅합니다. 로깅을위한 사용자 지정 콜백을 정의하기 위해 코드를 수정하려고 생각하지만 최선의 방법이 무엇인지 확신 할 수 없습니다. 내가 원하는로깅을위한 콜백을 제공하는 가장 좋은 방법은 무엇입니까?

해결 방법은 다음과 같습니다

  • 사용자가 로그에 대한 콜백을 정의 할 수 있습니다.
  • 콜백이 정의되지 않은 경우 fprint를 사용하십시오.

그래서 원하는 경우 재정의 할 수있는 기본 정의로 정적 함수의 일부 유형을 찾고 있습니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 정적 함수에 과부하가 걸리지 않으므로 모든 사람이 로깅 함수의 정의를 정의해야합니다.

답변

1

뭔가 :

typedef void (*logfuncp)(...); 

logfuncp callbackfuncp = NULL; 

void logfunction(...) 
{ 
    if (callbackfuncp) 
     callbackfuncp(...); 
    else 
     fprintf(logfile, ...); 
} 


void setcustomlogfunction(logfuncp newcallback) 
{ 
    callbackfuncp = newcallback; 
} 

작동합니다. ...은 로깅 인수를 나타내며 실제 ... C 구문을 사용하는 var-args 일 수 있지만 반드시 그럴 필요는 없습니다. 모두는 로깅이 무엇인지에 달려 있습니다.

0

지난 번 비슷한 문제가 발생했을 때 함수 포인터를 사용했습니다.

로거가 함수 포인터를 사용하여 함수를 호출하게하십시오.

기본적으로 (fprintf를 호출하는) 기본 방법으로 포인터를 설정하십시오.

사용자가 해당 동작을 재정의하려면 자신의 기능을 사용합니다.

....이 같은 또 다른 솔루션

관련 문제