- Compatibility: Python wheel requires glibc 2.38+ #72 — all release artifacts are now built on Ubuntu 22.04 (glibc 2.35), Windows Server 2022, and the lowest supported BSD releases (FreeBSD 13.2/13.5, OpenBSD 7.7, NetBSD 10.1, DragonFlyBSD 6.4.2, OmniOS r151054), so older Linux distros and BSD systems work out of the box.
- Build/CI: BSD build-time dependencies are now installed from self-hosted, immutable dependency snapshots instead of upstream package repos (which delete packages for EOL releases), making the release pipeline reproducible.
- Performance — Raising the bar once again: Typical workloads improve by approximately 10%–20%; actual gains vary with thread count, log format, argument types, and output mode.
- Bug fix: Slight memory leak #70 — internal caches of the compressed file Appender are now strictly bounded, completely resolving the issue where memory usage could keep growing in certain cases.
- Bug fix: Fixed parsing of
log.buffer_policy_when_full; the configureddiscard,block, orexpandpolicy is now applied correctly instead of silently falling back to the defaultblockpolicy. - Configuration: Added
write_cache_sizefor file Appenders, allowing the per-Appender write cache to be tuned from 64 KiB to 4 MiB. - Configuration: Added
format_template_cache_max_entriesandthread_info_cache_max_entriesfor compressed file Appenders. Defaults remain100000and2048; exceeding the configured entry limit keeps memory bounded but may emit repeated templates and increase compressed file size. - Robustness: Simplified the compressed-appender lookup cache (removed the redundant hot sub-table) and hardened its slot hashing with a murmur3-style full-avalanche finalizer, so the known structured key families (4-aligned thread ids, high-bits-only entropy, XOR/multiplier-cancelling keys) can no longer collapse the table into a single probe chain.
- Bug fix: Embedded null bytes were dropped in decoder output #69 — the log decoder now preserves embedded null bytes intact.
- Bug fix: Fixed decoding and recovery in the extreme case where different encryption modes are switched repeatedly within the same log file (mixed-encryption multi-segment), so such files now decode and recover correctly.
- Robustness: Hardened parsing of corrupted log files (guarding against unexpected-size memory allocations) and improved truncate validation and mmap allocation so disk-space errors surface before mapping access.
- Docs: Completed missing Java wrapper API comments (Javadoc).
- Bug fix: Library crashes (SIGBUS) or hangs when the disk is full #67
- Bug fix: [C#] [[Unity Editor] fetch_and_remove_console_buffer occasionally crashes — delegate recycled by GC during native call #66
- Unreal Engine: Added UE 5.8 support — Fab, Prebuilt, and Source distributions now cover UE 5.0 – 5.8.
- Unreal Engine 6: Added Source and Prebuilt plugin packages for current UE6 development builds. UE6 packages are distributed through GitHub Releases only; Fab support is pending Epic's official UE6 availability.
- OpenHarmony compatibility: Replaced ES2020
0nBigInt literals withBigInt(0)in the TypeScript wrapper so the samebqlogpackage on ohpm works on OpenHarmony 4.1+ (API 11+) as well as HarmonyOS NEXT — no separate package needed. - Recovery hardening: Strengthened data validation during recovery to detect malformed entries earlier and avoid potential crashes when consuming a corrupted ring buffer.
- Compatibility: Improved code compatibility with earlier Clang toolchains and frameworks such as MFC.
- Compatibility: Improved code compatibility across all supported Unreal Engine versions.
- Code quality: Refactored all SFINAE usages — moved
enable_iffrom return types to template parameters for improved readability and consistency. - Bug fix: Crash when enable stack trace in C++ #62
- Python 3.7+ support: Added Python 3.7+ support via CPython C Extension wrapper (Stable ABI).
- npm publishing: Node.js wrapper is now published to npm as
@pippocao/bqlog, installable vianpm install @pippocao/bqlog. - PyPI publishing: Python wrapper is now published to PyPI as
bqlog, installable viapip install bqlog. - Python category log generator: The
BqLog_CategoryLogGeneratortool now generates Python category log wrappers (.py). - TypeScript dual-target generation: The generator now produces separate TypeScript outputs for Node.js (
_nodejs.ts, imports@pippocao/bqlog) and HarmonyOS (_ohos.ts, importsbqlog). - Category log test coverage: Added category log test suites for Python, Java, C#, and TypeScript, covering category output, hierarchy, format parameters, and category mask filtering.
- Package registry publishing: BqLog is now published to npm (@pippocao/bqlog), PyPI (bqlog), Maven Central (com.tencent.bqlog), and OHPM (bqlog) — installable via npm install @pippocao/bqlog, pip install bqlog, Gradle/Maven dependency, and ohpm install bqlog respectively.
- Bug fix: Fixed incorrect handling of unsigned long type on MSVC. 无符号数输出为负数 #60
BqLog 2.x is a brand-new major version, rebuilt from the ground up to deliver better performance, broader platform coverage, and more robust features.
- HarmonyOS support: Added native HarmonyOS support, including ArkTS and C++.
- Node.js support: Added Node.js support (CJS and ESM).
- Cross-platform improvements: Improved cross-platform compatibility, stability and generality; supports more Unix systems.
- Performance boost: Average performance improved by ~80% for UTF-8, and by >500% for UTF-16 environments (C#, Unreal, Unity).
- Android standalone C++: Android no longer must be used together with Java.
- Configuration changes: Removed the
is_in_sandboxconfig and replaced it withbase_dir_type; added filters for snapshots and support for opening a new log file on each startup. - Hybrid asymmetric encryption: Added high-performance hybrid asymmetric encryption with almost zero overhead.
- Game engine plugins: Provides Unity, Tuanjie Engine, and Unreal Engine plugins, making it easy to use in game engines; provides ConsoleAppender redirection to game-engine editors and Blueprint support for Unreal.
- Binary distribution: The repository no longer ships binaries. From 2.x on, please download platform- and language-specific packages from the Releases page.
- Unlimited single log size: The size of a single log entry is no longer limited by
log.buffer_size. - Manual timezone: The timezone can now be specified manually.
- Deprecated raw_file appender: The
raw_fileappender is deprecated and no longer maintained in 2.x; please use thecompressed_fileappender instead. - Recovery promoted to stable: The Recovery feature's reliability has been improved and it has been promoted from experimental (beta) to stable (release).
- Changed the company entity of the open source License from "THL A29 Limited" to "Tencent"
- Android binary artifacts now support 16 KB page sizes
- Fixed a potential infinite loop issue when writing large-size logs
- Bug fix: Help: After initializing on Android as per the documentation, is_valid always returns false, but logging is unaffected. The documentation mentions checking is_valid before use or there may be risks. How should I troubleshoot this?.
- Bug fix: The program crashed on exit, please help check the cause, temporarily fixed in the current version. Will be completely resolved in the new 2.x version.
- Pull Request: Retain local variables and other information in jar files for easier source code reading. v1.5.0 will be the final stable version before the 2.x series.
- Bug fix: 能帮忙看一下这个crash是怎么回事吗?libsystem_kernel.dylib ___pthread_kill, crash fix: crash caused by array overflow.
- Bug fix: Enabling mmap on Android Devices May Cause Freezes or Crashes, mmap recover feature is reopen.
- Bug fix: mmap is not working on linux
- Bug fix: static initialization order fiasco
- Bug fix: mmap leads to hang on Android
- Bug fix: Enabling mmap on Android Devices May Cause Freezes or Crashes We have to temporarily disable the mmap recover feature until we can resolve its stability issues.
- Improvement: The configuration for the snapshot feature has been migrated from the API to the configuration file, supporting configurations for buffer size, category mask, and levels. For details, refer to Snapshot Configuration.
- Improvement: The Linux and Unix binaries will be automatically placed in the 32-bit and 64-bit directories based on the hardware architecture.
- Bug fix: Here, we found that in cases of high-concurrency
reset_configoperations, some thread safety issues may arise. We have fixed these issues and added corresponding checks for this scenario in the automated test cases.
- Improvement: Add 2 tech articles to docs folder.
- Bug fix: Fix the bugs about
C++ 20 format, Thanks the issue report from sdaereew. Thanks to the contribution from fkxingkong, see pull request.
- Improvement: Support to Unix like OS, which has passed the test on FreeBSD. Thanks to the contribution from bedwardly-down, see commit.
- Bug fix: Fix a bug in the layout, which would cause data residue after using
C++ 20 format specifications, leading to incorrect formatting of subsequent logs. Thanks to the contribution from fkxingkong, see pull request. - Bug fix: fix the side effects of
assertin the include files.
- Improvement: An
uninit()API has been added for calling before the program exits, to avoid issues where the program cannot exit normally in some cases. For details, see the API documentation.
- Improvement: In addition to passively intercepting the output of console appenders through console callbacks, it is also possible to cache the output of console appenders through a console buffer and actively retrieve it via API.
- Bug fix: Fix the compiling issue with C++ 20.
- Bug fix: Fix the issue where JNI_Onload sometimes is not called.
- First Release