콘텐츠로 이동
무료 평가 시작

pdcomm::DiagnosticLogging

클래스

SECS/GEM 네이티브 라이브러리의 선택형 진단 로그(diagnostic log)를 제어합니다.

class DiagnosticLogging

선언 위치: #include <pdcomm_logging.hpp>

로깅은 기본적으로 꺼져 있습니다. 켜면 라이브러리가 백그라운드 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)

선언 위치: #include <pdcomm_logging.hpp>

받는 키는 다음과 같으며 모두 선택 사항입니다.

  • 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()

선언 위치: #include <pdcomm_logging.hpp>

호출은 최대 2초 동안 기다립니다. 로깅을 한 번도 켠 적이 없으면 즉시 반환합니다.

참고

  • 예외 std::runtime_error: 로깅 스레드가 플러시(flush)를 제때 확인하지 않으면 발생합니다.

status

메서드

현재 로깅 상태를 JSON 객체로 반환합니다.

static std::string status()

선언 위치: #include <pdcomm_logging.hpp>

객체는 enabled, level/level_name, sink("file" 또는 "stderr"), max_bytes, files, forensics, 큐와 레코드 한도, 그리고 카운터 written, dropped, write_errors, configuration_errors를 보고합니다.

반환값

상태 JSON 텍스트입니다.

참고

  • 예외 std::runtime_error: 네이티브 호출이 실패하면 발생합니다. 상태 텍스트가 이 래퍼의 고정 4096바이트 버퍼를 넘는 경우도 포함합니다.