pdcomm::DiagnosticLogging
클래스
SECS/GEM 네이티브 라이브러리의 선택형 진단 로그(diagnostic log)를 제어합니다.
class DiagnosticLogging로깅은 기본적으로 꺼져 있습니다. 켜면 라이브러리가 백그라운드 pdcomm-log 스레드에서 JSON Lines 레코드를 비동기로 표준 오류나 회전(rotating) 파일에 씁니다. 프로토콜 호출은 로거를 기다리지 않습니다. 로거의 큐가 가득 찼거나 바쁘면 레코드를 버리고 status()에 그 수를 집계합니다.
설정은 프로세스 전체에 적용되지만 SECS/GEM 라이브러리에만 해당합니다. Modbus 라이브러리에는 별도의 pdcomm::modbus::DiagnosticLogging이 있습니다. 로거를 처음 사용할 때 PDCOMM_LOG 환경 변수가 off가 아닌 수준으로 설정되어 있으면 그 수준으로 로깅을 켭니다. 나머지 옵션은 PDCOMM_LOG_FILE, PDCOMM_LOG_MAX_BYTES, PDCOMM_LOG_FILES, PDCOMM_LOG_FORENSICS로 지정합니다.
pdcomm::DiagnosticLogging::configure(R"({"enabled":true,"level":"debug"})");
// ... run the session ...
pdcomm::DiagnosticLogging::flush();
std::cout << pdcomm::DiagnosticLogging::status() << '\n';
pdcomm::DiagnosticLogging::configure(R"({"enabled":false})");참고
- 모든 멤버는 정적(static)이며 스레드 안전(thread-safe)합니다. 실패하면 pdcomm::Error가 아니라
std::runtime_error를 던집니다.
멤버
configure
메서드
JSON 객체로 지정한 로깅 설정을 적용합니다.
static void configure(const std::string &json)받는 키는 다음과 같으며 모두 선택 사항입니다.
enabled(bool, 기본값true): 로깅을 켜거나 끕니다.level("error","warn","info","debug"또는"trace", 기본값"info").file(비어 있지 않은 경로 문자열, 표준 오류로 쓰려면null, 기본값은 표준 오류).max_bytes(회전 크기, 8192~1073741824, 기본값 10485760).files(보관할 회전 파일 수, 1~16, 기본값 3).forensics(bool, 기본값false): 리소스 샘플을 추가합니다."debug"또는"trace"가 필요합니다.
알 수 없는 키는 거부합니다. 호출은 로깅 스레드가 새 싱크(sink)를 적용할 때까지 최대 2초 동안 기다립니다.
매개변수
| 이름 | 설명 |
|---|---|
json | 최대 16384바이트의 UTF-8 JSON 객체입니다. |
참고
- 예외
std::runtime_error:json이 비어 있거나, 16384바이트보다 길거나, 올바른 JSON이 아니거나, 알 수 없거나 잘못된 옵션을 담고 있거나, 로그 파일을 열 수 없거나, 로깅 스레드가 제때 확인 응답을 보내지 않으면 발생합니다.
flush
메서드
큐에 있는 로그 레코드가 기록될 때까지 기다립니다.
static void flush()호출은 최대 2초 동안 기다립니다. 로깅을 한 번도 켠 적이 없으면 즉시 반환합니다.
참고
- 예외
std::runtime_error: 로깅 스레드가 플러시(flush)를 제때 확인하지 않으면 발생합니다.
status
메서드
현재 로깅 상태를 JSON 객체로 반환합니다.
static std::string status()객체는 enabled, level/level_name, sink("file" 또는 "stderr"), max_bytes, files, forensics, 큐와 레코드 한도, 그리고 카운터 written, dropped, write_errors, configuration_errors를 보고합니다.
반환값
상태 JSON 텍스트입니다.
참고
- 예외
std::runtime_error: 네이티브 호출이 실패하면 발생합니다. 상태 텍스트가 이 래퍼의 고정 4096바이트 버퍼를 넘는 경우도 포함합니다.