pypi / concurrent-log-handler
concurrent-log-handler
What changed in concurrent-log-handler 0.9, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-27.
1 breaking1 security1 new APIs and options2 performance2 behavior and defaults5 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initconcurrent-log-handler 0.912 changes
Breaking changes 1
The handler creates the log file on first write rather than in its constructor; the delay argument is ignored.
Security 1
When chmod or owner is configured, files are now pre-created with the correct permissions so other processes do not see them with intermediate permissions.
New APIs and options 1
Adds a hook to customize ConcurrentTimedRotatingFileHandler before its first rollover.
Performance 2
Fixes a Windows performance issue.
A duplicate stale-file check was removed from each write, cutting time per write by about 13% on a local disk when maxBytes is set.
Behavior and default changes 2
The handler skips chmod and chown when a file already has the configured mode and owner, and treats failures as non-fatal, preventing writes from failing for files owned by another user.
Both handlers keep an uncompressed rotated file after gzip fails, rather than deleting it or overwriting it during a later rotation.
Fixes and other changes 5
Configured chmod and owner settings now apply to rotated
.gzfiles.After fork, the child resets the handler's thread lock and clears inherited lock state, preventing hangs on logging and premature release of the parent's file lock.
Python 3.15 is now supported.
Rotated
.gzfiles now use the configured umask instead of the process default umask.Handlers inherited by child processes now reopen the lock file for independent lock isolation, and an in-process threading lock prevents threads from bypassing flock() serialization.