v0.6.0-WIP
Pre-releaseWarning
This is a work-in-progress prerelease and is not intended for production use.
APIs may change without notice. Pin to a stable release tag for production.
Changelog
All notable changes to this project will be documented in this file.
The format is based on Conventional Commits and this project adheres to Semantic Versioning.
[0.6.0-WIP] - 2026-09-07
💥 Breaking Changes
-
Rename public logging macros and preprocessor constants (01f6309)
- Rename main convenience macros (e.g., VIGIL_INFO, VIGIL_WARN) to use the explicit VIGIL_LOG_* prefix.
- Standardize preprocessor severity level constants from VIGIL_LOG_LEVEL_* to VIGIL_LEVEL_*.
- Introduce a centralized VIGIL_LOG_IMPL dispatch macro leveraging
if constexprfor compile-time filtering.
⚠️ The main logging macros (such as VIGIL_INFO, VIGIL_WARN, VIGIL_ERROR, etc.) now require the VIGIL_LOG_ prefix (e.g., VIGIL_LOG_INFO), and preprocessor severity constants have been renamed from VIGIL_LOG_LEVEL_* to VIGIL_LEVEL_*, breaking backward compatibility for API consumers.
🚀 Features
-
Add lazy file sinks and per-logger async configuration (49ad6e9)
- Introduce
LazyFileSinkto defer physical file creation until the first log message is written - Extend
LogConfigwith optionalAsyncandAsyncQueueSizeoverrides for individual loggers - Implement lazy initialization of the global
spdlogthread pool viaEnsureAsyncThreadPool - Standardize pointer allocations across the logging subsystem using custom
SmartPointersutilities
- Introduce
🐛 Bug Fixes
-
Ensure assertion header is always included for release builds (3a67ce5)
- Remove the
#if defined(VIGIL_ENABLE_ASSERTS)conditional guard around#include "vigil/assert.h"inlog_system.h - Prevent compilation errors in
Releasebuilds caused by missing assertion macros required by the logging system logic
- Remove the
-
Correct VIGIL_API placement and sink type consistency in LoggerImpl (a5f630a)
🚜 Refactor
-
Decouple SourceLocation from std::source_location alias in C++20 (54d2aef)
-
Encapsulate LoggerImpl members and add public accessors (4fa69b6)
- Make
m_Logger,m_ConsoleSink, andm_FileSinkprivate insideLoggerImplto improve data hiding - Expose controlled getter methods (
SpdLogger(),FileSink(),ConsoleSink(), andName()) - Add
AttachSink()method toLoggerImplfor white-box testing support
- Make
🛠️ Build System
-
Optimize CMake configuration structure and option management (84ed135)
- Clean up option alignments and default values for scoped logging and build flags.
- Reorganize module inclusion paths, target grouping, and output directory layouts.
-
Enhance compiler options and optimize dead-code stripping (2e4234a)
- Add MSVC multi-processor compilation (/MP) flag to accelerate builds.
- Implement cross-platform dead-code stripping via compile and link options for GCC, Clang, and MSVC.
- Scope _FORTIFY_SOURCE=2 strictly to Release builds under GCC and Clang.
- Restructure compiler options using generator expressions.
-
Correct C++ standard target for example executables to C++20 (7894d54)
🔧 Maintenance
-
Ensure complete test and example coverage in CI (dc01926)
-
Update git-cliff action version and adjust release name format (9839540)
-
Update workflow to trigger on workflow_dispatch and improve version handling (796ea20)
- Improve
cliff.tomlconfiguration
- Improve
-
Expand and improve test suite for assertions, async, hooks, and registry (22a64c0)
- Add test for
VIGIL_VERIFY,VIGIL_ASSERT, and related pointer/range validation macros - Introduce robust asynchronous logging tests verifying delivery guarantees and configuration overrides
- Implement dedicated unit tests for all event hooks (
OnMessage,OnLevelChange,OnFlush,OnShutdown) - Improve test helpers with
UniqueLogPath()to guarantee test isolation and prevent file collisions
- Add test for
Full Changelog: v0.5.1...v0.6.0-WIP