NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2403 most downloaded on PyPI
RotatingFileHandler replacement with concurrency, gzip and Windows support. Size and time based rotation.
Last release 7 months ago
22 Feb 2026
Release timing varies
gaps range from 9 days to 1.4 years
Most releases are documented
notes for 20 of 26 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
26 releases · first in 2017
Fix race conditions when a handler created before fork() is used by multiple child processes. Child processes that inherit a handler now automatically
Full Changelog: 0.9.28...0.9.29
Fix race conditions when a handler created before fork() is used by multiple child processes. Child processes
that inherit a handler now automatically reopen the lock file for independent lock isolation, and an in-process
threading lock prevents concurrent threads from bypassing flock() serialization.
Depend on portalocker >= 2.6.0 instead of 1.6.0. Earlier versions of portalocker on Windows can be problematic.
Add finalize_handler_configuration() hook to ConcurrentTimedRotatingFileHandler to allow customization of the
handler before the first rollover.
Fix missing a rollover when the app was shutdown during the scheduled time. Issue #81 :
Full Changelog: 0.9.27...0.9.28
0.9.28:
Fix missing a rollover when the app was shutdown during the scheduled time.
Issue #81:
When restarting after missing scheduled rollover times, the handler was updating to the
next future rollover without actually rotating accumulated logs. Now performs catch-up
rollovers on initialization. Also adds a unit test to simulate this scenario.
Fix NameError when logging during Python shutdown.
Issue #80:
During Python interpreter shutdown, built-in functions like open can be
cleaned up before __del__ methods run, causing NameError when libraries (e.g.,
aiohttp) attempt to log warnings about unclosed resources. This change stores
references to open and os.open at module level (_open and _os_open) and
uses these throughout the code, following the standard Python pattern for
shutdown-safe code. Adds new unit tests that verify logging works correctly
during shutdown scenarios, including extreme cases where even stored references
might become None.
One column per quarter.
Adds deprecation warning to queue.py setup_logging_queues().
Full Changelog: 0.9.26...0.9.27
Significant performance improvements, especially on the POSIX side.
keep_file_open=False in the constructor. The defaultTrue.keep_file_open option still appliesTrue.black are installed in "dev mode" (pip install -e .[dev]).lint.sh script to run Black, ruff, and mypy in one go.keep_file_open option.Full Changelog: 0.9.25...0.9.26
Update README.md by @Krogsager in https://github.com/Preston-Landers/concurrent-log-handler/pull/61
Full Changelog: https://github.com/Preston-Landers/concurrent-log-handler/compare/0.9.24...0.9.25
Full Changelog: 0.9.24...0.9.25
Fixes #58 issue building on certain platforms due to use_2to3 kwarg in setup.py.
Fixes #58 issue building on certain platforms due to use_2to3 kwarg in setup.py.
Begin requiring Python 3.6 or higher.
ConcurrentTimedRotatingFileHandler class which provides both time and/or size
based rotation. See the README.md for details.owner on Windows, though it will have no effect.concurrent-log-handler-0.9.23.tar.gz concurrent-log-handler-0.9.23-source-and-wheel.zip
Experimental release with support for time-based rotation (see README.md or PR#55 for details).
Compared to the previous release, the only change is a Python 2.7 compatibility fix.
Compared to the previous release, the only change is a Python 2.7 compatibility fix.
However, this is the final release that will support Python 2, which was end-of-life on Jan 1st, 2020.
Future versions will require Python 3.6 or higher.
Added new optional parameter "lock_file_directory"
support to execute setup_logging_queues in any times and asyncio by @ZhuYuJin in https://github.com/Preston-Landers/concurrent-log-handler/pull/32
Full Changelog: https://github.com/Preston-Landers/concurrent-log-handler/compare/0.9.19...0.9.20
Fixes Python 2.7 support in setup.py. Fixes accidental detection of Mac OS as Windows. Thanks @buddly27
Fixes Python 2.7 support in setup.py. Fixes accidental detection of Mac OS as Windows. Thanks @buddly27
Removes use of ez_setup.py, should fix some issues around installing old versions of distutils
Removes use of ez_setup.py, should fix some issues around installing old versions of distutils
Fix portalocker requirement on Python 2. Improve error handling.
Fix portalocker requirement on Python 2. Improve error handling.
The next release after this is likely to be a 1.0.0 release candidate.
Some incorrect code got inserted in the wheel, breaking Python 2 when installed from wheel. This should fix it. Sorry for the mixup.
Some incorrect code got inserted in the wheel, breaking Python 2 when installed from wheel. This should fix it. Sorry for the mixup.
Fix a Python 2 bug, and by default be more forgiving about encodings (default: ignore/drop characters which can't convert to the output encoding).
Fix a Python 2 bug, and by default be more forgiving about encodings (default: ignore/drop characters which can't convert to the output encoding).
0.9.14: Fix writing LF line endings on Windows when encoding is specified. Added newline and terminator kwargs to allow customizing line ending behavi
0.9.13: Fixes Crashes with ValueError: I/O operation on closed file (issue #16) Also should fix issue #13 with crashes related to Windows file locking
0.9.13: Fixes Crashes with ValueError: I/O operation on closed file (issue #16) Also should fix issue #13 with crashes related to Windows file locking. Big thanks to @terencehonles, @nsmcan, @wkoot, @dismine for doing the hard parts
This adds a umask option to allow setting permission bits when creating log files.
This adds a umask option to allow setting permission bits when creating log files.
Fix issues with gzip compression of logs on rotate (use buffered reads)
Fix issues with gzip compression of logs on rotate (use buffered reads)
This should fix a bug where the file lock was inadvertently shared among forked processes.
This should fix a bug where the file lock was inadvertently shared among forked processes.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →