Sofia-SIP 소스 - su 모듈 - su 읽기default_log.c/su_global_log.c

1935 단어 sofiasipvoipsu
앞서 언급한 바와 같이: 상세한 초기화su 는 본 적이 없습니다.log_t 구조체 변수의 코드입니다.말하자면,sudefault_log.h 코드는 우리에게 su 를 상세하게 초기화하는 방법을 보여 준다log 파일에 명시된sulog_default 변수.
4
su_log_t su_log_default[1] = {{
  sizeof(su_log_t),
  "sofia",		/* Log name */
  "SOFIA_DEBUG",	/* Environment variable controlling logging level */
  SOFIA_DEBUG_,		/* Default level */
  SU_LOG_MAX,		/* Maximum log level */
  0,
  default_logger,
  NULL
}};
상기 코드에서 보듯이sulog_default의 이름은 "sofia"이며, 사용 가능한 로그 레벨 환경 변수는 SOFIADEBUG, 기본 로그 레벨은 SOFIADEBUG_매크로 결정.더 중요한 것은 로그 출력 함수가default 로 확정되었다는 것이다logger.안타깝게도 여기는 지정stream을 보지 못했다.
4
static void default_logger(void *stream, char const *fmt, va_list ap)
{
  FILE *f = stream ? (FILE *)stream : stderr;

  vfprintf(f, fmt, ap);
}
로그 출력 함수 정의에서 알 수 있듯이 stderr를 출력 흐름으로 사용하지 않습니다.
su_global_log.c 파일의 주요 컨텐트는 다음과 같습니다.
4
extern char const SU_DEBUG[];
#endif

#ifdef SU_DEBUG
#define SU_DEBUG_ SU_DEBUG
#else
#define SU_DEBUG_ 3
#endif

/**Debug log for @b su module.
 *
 * The su_log_global is the log object used by @b su module. The level of
 * #su_log_global is set using #SU_DEBUG environment variable.
 */
su_log_t su_log_global[1] = {{
  sizeof(su_log_t),
  "su",
  "SU_DEBUG",
  SU_DEBUG_,
  SU_LOG_MAX,
  0,
  NULL,
  NULL
}};
위 코드와 같이sulog_글로벌의 목적은 로그 출력을 절약하는 것입니다. 비록 이 출력은 아무런 작용이 없지만, 실제 출력 함수가 없기 때문입니다.
이로써 슈가 제공하는 기초 로그 서비스 중sulog_default 및 sulog_글로벌 두 변수가 언제 상세하게 초기화됩니까?또한 c라이브러리가 상부 응용에 기초 서비스를 제공할 때 어떤 디자인 전략을 취해야 하는지 이해했다.간단하게 요약하면 다음과 같습니다.
1、su_log 파일은 로그 기초 구성 요소 제공하기;
2、su_debug.h 파일은 각 모듈 자체가 로그 서비스를 사용하는 데 필요한 SU 를 제공합니다DEBUG_0 - SUDEBUG_9 매크로
3、su_module_debug 파일은su모듈 자체가 기초 로그 서비스를 사용하는 데 필요한 매크로를 제공합니다.
4、su_default_log 및 suglobal_log 파일 초기화sulog_default 및 sulog_글로벌 변수;
5、기타 모듈은 로그 기초 서비스를 사용하고, 반드시 먼저 자신의su 를 사용해야 한다log_t 구조체 변수 재정의 SULOG, 그리고 sudebug.h 헤더 파일.

좋은 웹페이지 즐겨찾기