|
Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
|
doc_id: "LOG-PROJ-001" doc_title: "변경 이력 - Logger System" doc_version: "1.0.0" doc_date: "2026-04-04" doc_status: "Released" project: "logger_system"
SSOT: This document is the single source of truth for 변경 이력 - Logger System.
언어: English | 한국어
Logger System 프로젝트의 모든 주요 변경 사항이 이 파일에 문서화됩니다.
형식은 Keep a Changelog를 따르며, 이 프로젝트는 Semantic Versioning을 준수합니다.
이 릴리스는 "Fewest Elements" Simple Design 원칙에 따라 deprecated API 호환성 레이어를 제거합니다.
include/kcenon/logger/core/monitoring/monitoring_interface.h 제거include/kcenon/logger/core/monitoring/monitoring_interface_transition.h 제거<kcenon/common/interfaces/monitoring_interface.h>의 common::interfaces::IMonitor 사용has_thread_system_integration() 함수 제거 (Issue #324)has_iexecutor_interface() 사용has_any_executor_support()는 이제 IExecutor 인터페이스만 확인logger_interface.h 헤더 제거 (include/kcenon/logger/interfaces/logger_interface.h)logger_system::logger_interface 클래스 제거 - common::interfaces::ILogger 사용logger_system::logger_registry 클래스 제거THREAD_LOG_* 매크로 제거 - common_system의 LOG_* 매크로 사용with_thread_system_backend() 메서드 제거 (logger_builder)with_standalone_backend() 또는 with_backend() 사용result_void 클래스 제거 (error_codes.h)common::VoidResult 직접 사용make_logger_error 함수 제거result<T>{error_code, message} 생성자 직접 사용realtime_log_analyzer 클래스 - 로깅 중 실시간 이상 감지logger::set_realtime_analyzer() - 실시간 모니터링을 위한 분석기 설정logger::get_realtime_analyzer() - 설정된 분석기 접근logger::has_realtime_analysis() - 분석 활성화 여부 확인with_realtime_analyzer() - 사전 구성된 분석기 설정with_realtime_analysis(config, callback) - 설정으로 구성with_realtime_analysis(threshold, callback) - 기본값으로 활성화realtime_analyzer_factory::create_basic() - 기본 분석기realtime_analyzer_factory::create(config) - 사용자 정의 설정realtime_analyzer_factory::create_production() - 프로덕션 준비 기본값log_sampler 클래스 - 고처리량 시나리오에서 로그 볼륨 감소sampling_config 구조체sampling_statslogger::set_sampler() - 볼륨 감소를 위한 샘플러 설정logger::get_sampler() - 설정된 샘플러 접근logger::has_sampling() - 샘플링 활성화 여부 확인logger::get_sampling_stats() - 샘플링 메트릭 조회logger::reset_sampling_stats() - 메트릭 초기화with_sampler() - 사전 설정된 샘플러 설정with_sampling(config) - 설정으로 구성with_random_sampling(rate) - 랜덤 샘플링 단축with_rate_limiting(max_per_second) - Rate limiting 단축with_adaptive_sampling(threshold, min_rate) - Adaptive 샘플링sampler_factory::create_disabled() - 패스스루 샘플러sampler_factory::create_random(rate) - 랜덤 샘플러sampler_factory::create_rate_limited(max) - Rate limitersampler_factory::create_adaptive(threshold, min) - Adaptive 샘플러sampler_factory::create_production(rate, critical_levels) - 프로덕션 기본값thread_safe_writer에 구조화된 필드를 보존하는 새로운 write(const log_entry&) 메서드write_entry_impl() protected 메서드console_writer, file_writer, rotating_file_writer가 완전한 구조화 지원으로 업데이트log_filter.h)field_exists_filter - 필드 존재/부재로 필터링field_value_filter - 정확한 필드 값 일치로 필터링field_range_filter - 숫자 필드 범위로 필터링 (min/max)field_regex_filter - 문자열 필드 패턴 매칭으로 필터링category_filter - log entry 카테고리로 필터링sampling_config.h, log_sampler.h)field_rates 설정always_log_fields 설정should_bypass_field() 메서드get_field_rate() 메서드gcov 라이브러리 링크 추가logger_structured_logging_test를 coverage 타겟 등록 목록에 추가,__gcov_exit',__gcov_merge_add'` 오류 해결executor_integration.cpp의 미사용 변수 경고 수정auto* standalone 변수를 직접 dynamic_cast null 체크로 교체enable() 및 set_executor() 메서드에서 -Wunused-variable 경고 제거EnhancedThreadPoolMetrics에 대한 undefined reference 오류 수정thread_system checkout을 feature/adopt-kcenon-feature-flags에서 main 브랜치로 변경EnhancedThreadPoolMetrics 구현이 없었음LOGGER_USE_THREAD_SYSTEM=ON 제거integration-tests.yml, ci.yml, benchmarks.yml, sanitizers.ymlMultipleStartStopCycles 테스트 타임아웃 수정start() 호출 방지를 위해 CreateLoggerWithFileWriter()를 CreateLogger()로 교체WaitForFlush() 대신 단순 flush() 사용otlp_writer에서 std::jthread를 std::thread로 교체std::jthread와 std::stop_token이 지원되지 않음running_ atomic 플래그를 종료 메커니즘으로 사용signal_manager.h에서 write/fsync 매크로 오염 제거#define write _write 매크로가 다른 헤더로 누출되는 문제batch_writer.h와 otlp_writer.h의 write() 메서드가 _write()로 이름 변경되는 문제 발생detail::safe_write() 및 detail::safe_fsync() 인라인 함수로 대체하여 수정kcenon.logger 모듈 인터페이스 생성src/modules/logger.cppm: 기본 모듈 인터페이스src/modules/core.cppm: Core 파티션 (Logger, LogContext, LogCollector)src/modules/backends.cppm: Backends 파티션 (integration_backend, standalone_backend)src/modules/analysis.cppm: Analysis 파티션 (log_analyzer, analysis_stats)LOGGER_USE_MODULES 옵션 추가LOGGER_HAS_MODULES 컴파일 정의add_writer(name, writer)가 이제 이름으로 writer를 올바르게 저장함name 파라미터가 무시됨get_writer(name)로 조회하고 remove_writer(name)로 제거 가능add_writer(name, writer)가 이제 void 대신 common::VoidResult 반환add_writer(writer) 오버로드와 일관성 유지add_writer(name, writer)가 일반 목록과 이름 맵 모두에 writer 저장remove_writer(name)가 두 저장소 모두에서 writer 제거get_writer(name)가 이름으로 writer 포인터 조회clear_writers()가 이제 named writer 저장소도 정리<kcenon/common/config/feature_flags.h> 포함하여 기능 감지<kcenon/common/config/feature_flags.h> 포함하여 기능 감지log(level, message, file, line, function) 메서드에서 override 키워드 제거common::interfaces::ILogger에서 제거됨 (Issue #217)thread_pool::is_running() unresolved external symbol 오류 수정KCENON_HAS_COMMON_EXECUTOR가 정의되지 않음core/CMakeLists.txt에서 executor_interface.h 발견 시 KCENON_HAS_COMMON_EXECUTOR=1 정의 추가UNIFIED_USE_LOCAL=ON 추가하여 로컬 checkout된 의존성 사용LOGGER_HAS_* 매크로는 이제 common_system의 KCENON_HAS_*에 대한 별칭입니다. 새 코드에서는 KCENON_HAS_*를 직접 사용:
log(log_level, std::string_view, const source_location&) 메서드log(log_level, string, file, line, function) 메서드는 새 API로 위임새 코드에서는 common_system의 LOG_* 매크로를 직접 사용:
ILogger 인터페이스 구현 시 새로운 source_location 기반 메서드 오버라이드:
shared::ILogger 및 shared::IService 구현 제거USE_THREAD_SYSTEM 조건부 컴파일 분기가 제거됨kcenon::common::interfaces::ILogger를 제공하는 common_logger_adapter.h를 사용<kcenon/thread/interfaces/logger_interface.h> 대신 <kcenon/thread/thread_pool.h> 사용thread_system 통합 시 다음과 같이 변경:
logger_module::v1_compat 네임스페이스 참조create_logger(), create_file_logger(), add_file_writer()LOG_INFO, LOG_DEBUG, LOG_ERROR, LOG_WARNINGlogger_config_v1thread_module 네임스페이스 제거 (독립 모드에서 사용 불가)filters:: 네임스페이스 추가<filesystem> 추가log_server, log_aggregator, log_analyzer::time_window_statslog_sanitizer, structured_logger, get_router()common::interfaces::ILogger를 구현logger_system::log_level과 common::interfaces::log_level 간 타입 안전 로그 레벨 변환to_logger_system_level(): common에서 네이티브 로그 레벨로 변환to_common_level(): 네이티브에서 common 로그 레벨로 변환log(log_level, const std::string&) → VoidResult 반환log(log_level, std::string_view, const source_location&) → VoidResult 반환log(log_level, message, file, line, function) → VoidResult 반환log(const log_entry&) → 구조화된 로깅 지원is_enabled(log_level) → 레벨 활성화 여부 확인set_level(log_level) → 최소 로그 레벨 설정, VoidResult 반환get_level() → common::interfaces::log_level로 현재 최소 레벨 반환flush() → 버퍼 플러시, VoidResult 반환tests/unit/ilogger_interface_test.cpp에 새 테스트 스위트security::critical_logger_interface (기존)common::interfaces::ILogger (새로운 표준화된 인터페이스)log() 메서드가 이제 void 대신 common::VoidResult 반환flush()가 이제 void 대신 common::VoidResult 반환set_level()이 이제 void 대신 common::VoidResult 반환kcenon/common/interfaces/logger_interface.h를 사용하도록 권장logger_system::log_level 사용 중단 표시, common::interfaces::log_level 사용logger_system::logger_interface 사용 중단 표시, common::interfaces::ILogger 사용logger_system::log_level 오버로드가 여전히 작동log(log_level, message) - 시그니처 및 동작 변경 없음log(log_level, message, file, line, function) - 변경 없음is_enabled(log_level) - 변경 없음set_min_level(log_level) - 변경 없음get_min_level() - 네이티브 log_level 반환기존 코드는 변경 없이 계속 작동합니다. 새로운 ILogger 인터페이스를 사용하려면:
LOGGER_USE_THREAD_SYSTEM (기본값: OFF)으로 통합 제어log_collector.cpp: stop_token을 사용하는 log_collector_jthread_workernetwork_writer.cpp: network_send_jthread_worker 및 network_reconnect_jthread_workerbatch_processor.cpp: batch_processing_jthread_workerasync_worker.h/cpp: 새로운 독립형 비동기 워커 구현src/impl/async/async_worker.h 및 async_worker.cpp에 위치cmake/CompilerChecks.cmake: std::format을 사용할 수 없으면 FATAL_ERROR 발생cmake/LoggerCompatibility.cmake: fmt 탐지, C++17 모드, vcpkg fallback 제거check_std_format(): find_package(fmt) 및 vcpkg fallback 로직 제거configure_logger_compatibility(): C++17 호환 모드 완전 제거setup_formatting_library(): fmt::format 및 basic formatting 분기 제거setup_vcpkg_fmt_fallback(): 함수 완전 제거console_writer: 표준 출력/오류 스트림 로깅file_writer: 기본 파일 출력rotating_file_writer: 크기/시간별 자동 로그 로테이션network_writer: 네트워크를 통한 원격 로깅critical_writer: 동기식 중요 메시지 로깅hybrid_writer: 다중 writer 결합 지원text_formatter: 일반 텍스트 형식json_formatter: 구조화된 JSON 로깅xml_formatter: 레거시 시스템을 위한 XML 형식저장소: https://github.com/kcenon/logger_system 문서: docs/ 라이선스: LICENSE 파일 참조 관리자: kceno.nosp@m.n@na.nosp@m.ver.c.nosp@m.om
| 버전 | 릴리스 날짜 | C++ 표준 | CMake 최소 버전 | 상태 |
|---|---|---|---|---|
| 1.0.0 | 2025-10-22 | C++20 | 3.16 | 현재 |
통합 thread_system 또는 독립형 logger 구현에서 마이그레이션하려면 MIGRATION.md를 참조하십시오.
최종 업데이트: 2025-10-22