로그 메시지 시스템#
로그 메시지 시스템의 핵심에는 메시지를 log4cppa 및 siso_log 라이브러리로 전달하는 디스패처가 있습니다. 로깅 라이브러리 log4cpp는 GenICam 및 pylon SDK에서 콘솔, 로그 파일, syslog, pylon Event Logger Application 및 기타 대상에 대한 로깅을 제공하는 데 사용됩니다. 사용자는 siso_log 라이브러리를 사용하여 콜백 핸들러를 등록하고 경고 및 오류 메시지를 수신할 수 있습니다.
-
log4cpp는 Log4j를 C++로 이식한 것이며 SourceForge에서 찾을 수 있습니다. log4cpp는 Framegrabber SDK 버전 5.11.3에서 처음 사용되었습니다. 이전 버전의 Framegrabber SDK에서는 log4cpp의 대안인 log4cxx를 사용했습니다. ↩
로깅을 위한 Log4cpp 구성#
The 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> 은(는) 해당 카테고리와 그 모든 하위 카테고리의 로그 메시지를 전달할 어펜더를 지정합니다.
카테고리 옵션은 모든 하위 카테고리에 상속되지만, 하위 카테고리에 별도의 옵션을 제공하여 덮어쓸 수 있습니다. 마찬가지로, 모든 하위-하위 카테고리는 하위 카테고리의 구성을 상속합니다.
대부분의 구성 파일은 특수한 지정 사항을 사용하여 모든 카테고리에 대한 합리적인 기본값을 설정하는 것으로 시작합니다. rootCategory. 예를 들면 다음과 같습니다.
log4j.rootCategory=NOTICE, stdout
이 구성 옵션은 다음 심각도의 모든 메시지를 보냅니다. FATAL, ALERT, CRIT, ERROR, WARN및 NOTICE appender로 전송합니다. stdout. Configuring Log4cpp Appenders에 설명된 대로 구성 파일에서 어펜더를 정의해야 합니다. Log4cpp 어펜더 구성.
로그 수준 매핑#
Framegrabber SDK는 내부적으로 이전 버전의 Framegrabber SDK에서 사용된 라이브러리 log4cxx의 명명 규칙을 따르는 서로 다른 로그 메시지 중요도 이름 세트를 사용합니다. 예를 들어 siso_log 라이브러리나 microDisplay X의 Debug 대화 상자를 사용할 때 이러한 내부 로그 수준을 접할 수 있습니다.
| 중요도 | siso_log | log4cpp |
|---|---|---|
| lower | TRACE | DEBUG |
| DEBUG | INFO | |
| INFO | 참고 | |
| WARN | WARN | |
| ERROR | ERROR | |
| 더 높게 | FATAL | CRIT, FATAL, ALERT |
Log4cpp 어펜더 구성#
로그 메시지를 특정 대상로 전달하려면 설정 파일에서 어펜더(appender)를 정의하고 구성해야 합니다. 어펜더는 설정 파일의 카테고리 설정에 포함되어야 합니다.
Framegrabber SDK와 함께 설치되는 log4cpp 라이브러리에서는 다양한 유형의 어펜더를 제공합니다. 각 어펜더 유형에는 로그 파일의 이름 지정 방식, 저장 위치, 크기 제한 여부 등을 정의하는 설정 가능한 파라미터 세트가 있습니다.
appender를 정의하려면 log4cpp.appender 계층 구조에서 이름을 키로 지정하고 유형을 값으로 지정합니다. 예를 들어 다음 줄은 다음과 같은 이름의 appender를 정의합니다. stdout 콘솔에 로그 메시지를 쓰는 기능:
log4cpp.appender.stdout=ConsoleAppender
이름이 지정된 appender 아래의 계층 구조에 옵션을 설정하여 appender를 추가로 구성할 수 있습니다. 예를 들어 다음 줄은 로그 메시지 형식을 변경합니다.
log4cpp.appender.stdout.layout=PatternLayout
log4cpp.appender.stdout.layout.ConversionPattern=[%d:%t:%c] %p: %m%n
로그 메시지 형식 지정#
모든 appender는 다음을 설정하고 구성하여 로그 메시지 형식을 지정하는 몇 가지 공통 옵션을 공유합니다. layout. 추가로 구성할 수 없는 두 가지 간단하고 고정된 레이아웃이 있습니다. SimpleLayout 및 BasicLayout. PatternLayout 다음 설정을 통해 구성할 수 있습니다. ConversionPattern.
옵션 ConversionPattern 은(는) 형식 문자열이며, 다음 형식 지정자와 모든 로그 메시지에 표시되어야 하는 텍스트를 포함할 수 있습니다.
| 지정자 | 의미 |
|---|---|
| %% | 문자 % |
| %c | 범주 |
| %d | 날짜 (아래 참조) |
| %m | 로그 메시지 |
| %n | 줄 바꿈 문자 |
| %p | 우선순위(심각도) |
| %r | 레이아웃 생성 후 경과된 밀리초 |
| %R | 1970년 1월 1일 이후 경과된 초 |
| %t | Thread ID |
| %u | 프로세스 시작 후 클록 틱(clock tick) 수 |
날짜 형식 지정자는 시스템에 지정된 짧은 날짜 형식에 따라 날짜와 시간을 추가합니다. 날짜 형식을 사용자 지정하려면 날짜 형식 지정자 뒤에 중괄호로 둘러싸인 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.
The 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
The RollingFileAppender 지정된 파일 크기까지만 로그 파일에 쓰고, 그 후 파일의 백업을 생성한 다음 파일을 지우고 새로 시작합니다. 다음과 마찬가지로 FileAppender, fileName 로그 파일의 이름을 지정하는 데 사용됩니다. 또한, maxFileSize 을(를) 설정하여 롤오버 전의 최대 파일 크기를 변경할 수 있습니다. 기본값은 maxFileSize (으)로 10 MB입니다. 허용되는 백업 파일 수를 설정하려면 maxBackupIndex을(를) 설정할 수 있습니다. 기본값은 maxBackupIndex 입니다.
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 심각도(severity)의 로그 메시지가 로그 메시지 시스템에서 보고될 때마다 호출됩니다. 프로세스당 하나의 함수만 등록할 수 있습니다.
의 매개변수 SisoLog_RegisterLogMsgCallback() 콜백 함수:
- 콜백 함수의 처음 두 매개변수는 프로세스 및 스레드 ID입니다.
- 세 번째 매개변수는 로거(카테고리)의 이름입니다.
- 네 번째 매개변수는 "로그 수준" 또는 "우선순위"라고도 하는 심각도입니다.
- 다섯 번째 매개변수는 로그 메시지입니다.
- 6번째 및 7번째 파라미터는 태그의 수와 태그 배열에 대한 포인터입니다. 태그는 디바이스 관계와 같은 추가 메타데이터를 로그 메시지에 추가하는 데 사용됩니다.
- 콜백 함수의 마지막 파라미터는 다음 호출과 함께 제공된 포인터입니다.
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의 로그 메시지 시스템으로부터 로그 메시지 수신을 중지하려면:
- 로그 메시지 전달을 비활성화하려면 다음을 호출하십시오.
SisoLog_SetMode()을(를) 호출하고SISOLOG_MODE_OFF. - 다음 함수를 호출하여 콜백 함수 등록을 해제하십시오.
SisoLog_RegisterLogMsgCallback()을(를) 호출하고nullptr콜백 함수와 사용자 컨텍스트 포인터 모두에 대해. - 애플리케이션을 종료하기 전에 다음을 호출하십시오.
SisoLog_FreeLibrary().