콘텐츠로 건너뛰기

로그 메시지 시스템#

Framegrabber SDK의 로그 메시지 시스템은 사용자 응용 프로그램에서 발생하는 문제를 추적하는 데 유용한 추가 정보를 제공합니다. 약 1000개의 개별 메시지를 통해 시스템 구성 정보, 예상치 못한 조건에 대한 경고, 상세한 오류 설명 등이 제공됩니다.

로그 메시지 시스템의 핵심은 log4cppa 및 siso_log 라이브러리로 메시지를 전달하는 디스패처입니다. 로깅 라이브러리 log4cpp는 GenICam 및 pylon SDK에서 콘솔, 로그 파일, syslog, pylon Event Logger Application 및 기타 대상에 대한 로깅을 제공하는 데 사용됩니다. 사용자는 siso_log 라이브러리를 사용하여 콜백 핸들러를 등록하고 경고 및 오류 메시지를 수신할 수 있습니다.


  1. log4cpp는 Log4j를 C++로 이식한 것으로 SourceForge에서 확인할 수 있습니다. log4cpp는 Framegrabber SDK 버전 5.11.3에서 처음 사용되었습니다. 이전 버전의 Framegrabber SDK에서는 log4cpp의 대체재인 log4cxx를 사용했습니다. ↩

로깅을 위한 Log4cpp 구성#

이 log4cpp 라이브러리는 구성 파일을 사용하여 구성할 수 있습니다. Framegrabber SDK의 기본 구성은 설치 디렉터리의 다음 파일에서 찾을 수 있습니다. bin/BaslerFgSdkLogging.properties. 구성을 변경하려면 이 파일을 편집하거나 사용자 지정 구성 파일을 제공하고 다음 환경 변수를 설정하면 됩니다. BASLER_FGSDK_LOGGING_CONFIG 파일의 위치를 가리키도록 합니다.

다음의 구성 파일 log4cpp 은(는) 텍스트 파일입니다. 파일의 각 줄에는 형식으로 지정된 하나의 구성 옵션이 포함될 수 있습니다. <key>=<value>, 그리고 다음으로 시작하는 선택적 주석 # 문자입니다. 빈 줄과 주석만 포함된 줄도 허용됩니다.

<key> 은(는) 계층 구조 요소이며, 계층 수준은 다음으로 구분됩니다. . 문자입니다. 계층 구조의 최상위 수준은 항상 log4cpp, 또는 다음을 사용할 수도 있습니다. log4j입니다. 계층 구조의 두 번째 수준은 다음 중 하나입니다. category (다음을 포함하여 rootCategory), 또는 appender.

범주는 로그 메시지가 어디서 발생하는지 지정하고, 어펜더는 로그 메시지의 대상을 지정합니다.

Log4cpp 카테고리 구성#

카테고리에 대한 옵션은 다음과 같습니다. <min-severity>[, <appender>[...]]. 다음의 값 <min-severity> 은(는) 다음과 같을 수 있습니다.

  • FATAL,
  • ALERT,
  • CRIT,
  • ERROR,
  • WARN,
  • NOTICE,
  • INFO, 또는
  • DEBUG

<min-severity> 은(는) 해당 범주 및 모든 하위 범주에 대해 보고할 로그 메시지의 심각도 임계값을 지정합니다. 선택적 목록 <appender> 은(는) 해당 카테고리 및 모든 하위 카테고리의 로그 메시지를 전달할 appender를 지정합니다.

범주 옵션은 모든 하위 범주에 상속되지만, 하위 범주에 대해 별도의 옵션을 제공하여 덮어쓸 수 있습니다. 마찬가지로 모든 하-하위 범주는 하위 범주의 구성을 상속합니다.

대부분의 설정 파일은 특수 지정인 rootCategory. 예를 들어:

log4j.rootCategory=NOTICE, stdout

이 구성 옵션은 심각도의 모든 메시지를 전송합니다. FATAL, ALERT, CRIT, ERROR, WARN및 NOTICE 을(를) appender에 stdout. 에 설명된 대로 구성 파일에서 appender를 정의해야 합니다. Log4cpp Appender 구성.

로그 수준 매핑#

Framegrabber SDK는 내부적으로 이전 버전의 Framegrabber SDK에서 사용된 log4cxx 라이브러리의 명명 규칙을 따르는 로그 메시지 심각도용 별도의 이름 세트를 사용합니다. 예를 들어 siso_log 라이브러리나 microDisplay X의 Debug 대화 상자를 사용할 때 이러한 내부 로그 수준을 접할 수 있습니다.

심각도 siso_log log4cpp
하위 TRACE DEBUG
DEBUG INFO
INFO 참고
WARN WARN
ERROR ERROR
higher FATAL CRIT, FATAL, ALERT

Log4cpp Appender 구성#

로그 메시지를 특정 대상로 전달하려면 설정 파일에서 appender를 정의하고 구성해야 합니다. Appender는 설정 파일의 category 구성에 포함되어야 합니다.

Framegrabber SDK와 함께 설치되는 log4cpp 라이브러리에서 제공하는 다양한 유형의 appender가 있습니다. 각 appender 유형에는 예를 들어 로그 파일의 이름 지정 방식, 저장 위치, 크기 제한 여부 등을 정의하는 설정 가능한 파라미터 세트가 있습니다.

appender를 정의하기 위해 이름은 다음과 같이 키로 지정됩니다. log4cpp.appender 계층 구조이며 유형이 값으로 지정됩니다. 예를 들어 다음 줄은 다음 이름의 어펜더를 정의합니다. stdout 콘솔에 로그 메시지를 쓰는 방식:

log4cpp.appender.stdout=ConsoleAppender

이름이 지정된 어펜더 아래의 계층 구조에 옵션을 설정하여 어펜더를 더 구성할 수 있습니다. 예를 들어 다음 줄은 로그 메시지의 형식을 변경합니다.

log4cpp.appender.stdout.layout=PatternLayout
log4cpp.appender.stdout.layout.ConversionPattern=[%d:%t:%c] %p: %m%n

로그 메시지 형식 지정#

모든 appender는 다음을 설정하고 구성하여 로그 메시지 형식을 지정하는 몇 가지 공통 옵션을 공유합니다. layout. 추가로 구성할 수 없는 두 가지 간단한 고정 레이아웃이 있습니다. SimpleLayout 및 BasicLayout. PatternLayout 은(는) 다음을 설정하여 구성할 수 있습니다. ConversionPattern.

옵션 ConversionPattern 은(는) 형식 문자열이며, 모든 로그 메시지에 나타나야 하는 텍스트와 함께 다음 형식 지정자를 포함할 수 있습니다.

지정자 의미
%% 문자 %
%c Category
%d 날짜 (아래 참조)
%m 로그 메시지
%n 줄 바꿈 문자
%p Priority (심각도)
%r 레이아웃 생성 후 경과된 밀리초
%R 1970년 1월 1일 이후 경과된 초
%t Thread ID
%u 프로세스 시작 후의 클럭 틱(Clock ticks)

날짜 형식 지정자는 시스템에 지정된 짧은 날짜 형식에 따라 날짜와 시간을 추가합니다. 날짜 형식을 사용자 지정하려면 날짜 형식 지정자 뒤에 중괄호로 묶인 strftime 형식 지정자를 사용할 수 있습니다(%d{...}). 자세한 내용은 strftime 문서 를 참조하십시오. strftime 형식 지정자에 대한 유일한 변경 사항은 지정자 %l 은(는) 0으로 채워 세 자리를 만드는 밀리초를 출력합니다. 예를 들어 밀리초를 포함한 확장 ISO 8601 형식으로 날짜와 시간을 출력하려면 다음 중 하나를 사용하십시오. %d{%FT%T.%l%z}, 또는 %d{%Y-%m-%dT%H:%M:%S.%l%z}.

파일에 로깅#

로그 메시지를 파일에 저장하는 두 가지 appender가 있습니다. FileAppender 및 RollingFileAppender.

이 FileAppender 에는 파일 이름을 설정하기 위한 필수 옵션인 fileName이(가) 있습니다. 예를 들어 다음 이름의 파일에 로그 메시지를 기록하려면 fglib.log 콘솔 외에도 설정 파일은 다음과 같을 수 있습니다.

log4cpp.rootCategory=NOTICE, stdout, logfile

log4cpp.appender.stdout=ConsoleAppender
log4cpp.appender.stdout.layout=SimpleLayout

log4cpp.appender.logfile=FileAppender
log4cpp.appender.logfile.fileName=fglib.log
log4cpp.appender.logfile.layout=BasicLayout

이 RollingFileAppender 지정된 파일 크기까지만 로그 파일에 쓴 다음 파일의 백업을 만들고 파일을 지워 새로 시작합니다. FileAppender, fileName 은(는) 로그 파일의 이름을 지정하는 데 사용됩니다. 또한 maxFileSize 롤오버 전 최대 파일 크기를 변경하도록 설정할 수 있습니다. 기본값은 maxFileSize 은(는) 10 MB입니다. 허용되는 백업 파일 수를 설정하려면 maxBackupIndex. 기본값은 maxBackupIndex 은(는) 1입니다.

Pylon Event Logger 사용#

log4cpp 라이브러리 대신 pylon Event Logger Application을 사용하여 로그 메시지를 표시, 필터링 및 강조 표시할 수 있습니다.

pylon Event Logger 애플리케이션에서 사용자 애플리케이션을 시작하면 pylon Event Logger 애플리케이션이 사용자 애플리케이션으로부터 로그 메시지를 수신하도록 보장하는 설정 파일이 자동으로 생성되어 사용됩니다.

사용자 애플리케이션을 다른 방식으로 시작하는 경우, log4cpp 구성에 다음이 포함되어야 합니다. EltAppender. EltAppender 은(는) 네트워크 인터페이스를 통해 로그 메시지를 전송하는 방식으로 작동하므로 portNumber을(를) 사용하여 사용할 포트를 지정해야 합니다. 포트는 pylon Event Logger 애플리케이션의 설정과 일치해야 합니다. 이 시나리오의 기본 설정은 다음과 같습니다.

log4j.rootCategory=NOTICE, pylonEventLogger, stdout

log4j.appender.stdout=ConsoleAppender
log4j.appender.stdout.layout=PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d:%t:%c] %p: %m%n

log4j.appender.pylonEventLogger=org.apache.log4j.EltAppender
log4j.appender.pylonEventLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.pylonEventLogger.layout.ConversionPattern=[%d:%t:%c] %p: %m%n
log4j.appender.pylonEventLogger.portNumber=12320

siso_log 라이브러리를 사용하여 응용 프로그램에서 로그 메시지 수신#

int SisoLog_InitLibrary();
typedef void FuncType_LogMsgCallback(
    tProcessId pid,
    tThreadId tid,
    const char * const logger,
    unsigned int level,
    const char * const msg,
    unsigned int tagcount,
    const tSisoLogTag * const tags,
    void * userdata
);

int SisoLog_RegisterLogMsgCallback(
    FuncType_LogMsgCallback * callback,
    void * userdata);
int SisoLog_SetMode(
    unsigned int mode);

int SisoLog_GetMode(
    unsigned int * mode);

Framegrabber SDK의 로그 메시지 시스템에서 로그 메시지를 수신하려면 애플리케이션 프로젝트에 siso_log 라이브러리를 추가하고 소스 코드에 다음을 포함하십시오. siso_log.h 자세한 내용은 Framegrabber API Manual의 사전 요구 사항 장을 참조하십시오.

라이브러리를 사용하기 시작하려면 siso_log 먼저 다음을 호출하십시오. SisoLog_InitLibrary() 을(를) 수행하여 초기화를 진행합니다.

다음과 함께 SisoLog_RegisterLogMsgCallback() 유형의 함수를 등록할 수 있습니다 FuncType_LogMsgCallback, 심각도에 해당하는 로그 메시지가 발생할 때마다 호출됩니다. WARN, ERROR, 또는 FATAL 이(가) 로그 메시지 시스템에서 보고됩니다. 프로세스당 하나의 함수만 등록할 수 있습니다.

다음의 파라미터: SisoLog_RegisterLogMsgCallback() 콜백 함수:

  • 콜백 함수의 처음 두 파라미터는 프로세스 및 스레드 ID입니다.
  • 세 번째 파라미터는 로거(카테고리)의 이름입니다.
  • 네 번째 매개변수는 심각도이며, “로그 수준” 또는 “우선순위”라고도 합니다.
  • 다섯 번째 파라미터는 로그 메시지입니다.
  • 여섯 번째와 일곱 번째 파라미터는 태그의 수와 태그 배열에 대한 포인터입니다. 태그는 장치 관계와 같은 추가 메타데이터를 로그 메시지에 추가하는 데 사용됩니다.
  • 콜백 함수의 마지막 파라미터는 다음 호출과 함께 제공된 포인터입니다. SisoLog_RegisterLogMsgCallback() 이며, 예를 들어 사용자 애플리케이션을 나타내는 클래스 인스턴스의 이 포인터와 같이 컨텍스트 구조체나 클래스에 대한 포인터로 사용할 수 있습니다.

콜백 함수가 등록된 후, 애플리케이션은 다음을 호출해야 합니다. SisoLog_SetMode() 그리고 전달 SISOLOG_MODE_DEFAULT 로그 메시지 전달을 활성화하려면

로그 메시지 수신 중지#

int SisoLog_RegisterLogMsgCallback(
    FuncType_LogMsgCallback * callback,
    void * userdata);
int SisoLog_SetMode(
    unsigned int mode);
int SisoLog_FreeLibrary();

Framegrabber SDK의 로그 메시지 시스템으로부터 로그 메시지 수신을 중지하려면:

  1. 로그 메시지 전달을 비활성화하려면 다음을 호출하세요. SisoLog_SetMode() 그리고 전달 SISOLOG_MODE_OFF.
  2. 을(를) 호출하여 콜백 함수 등록을 해제합니다. SisoLog_RegisterLogMsgCallback() 그리고 전달 nullptr 콜백 함수와 사용자 컨텍스트 포인터 모두에 해당합니다.
  3. 애플리케이션을 종료하기 전에 다음을 호출하십시오. SisoLog_FreeLibrary().