NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1976 most downloaded on PyPI
A logging replacement for Python
Last release 2 months ago
05 Aug 2026
Ships unpredictably
gaps range from 3 weeks to 3.8 years
Most releases are documented
notes for 39 of 52 stable releases
Nothing withdrawn
no release was ever pulled
16 years old
52 releases · first in 2010
See CHANGES
See CHANGES
One column per quarter.
Python 3.15 support.
Binary wheels are not published yet and will follow once cibuildwheel ships support for the 3.15 release candidates.
Logging performance has improved significantly: resolving the active handlers, flags, and processors is several times faster than in 1.9.x, and multi-threaded logging no longer takes a shared lock. This especially benefits free-threaded Python. #607
manylinux2014 wheels are provided once again on x86_64, restoring support for distributions with glibc 2.17 or newer.
universal2 macOS wheels are no longer built. Separate x86_64 and arm64 wheels continue to be provided.
logbook.notifiers.create_notification_handler
logbook.notifiers.LibNotifyHandler
Support for x86_64 macOS. Logbook 2.0 will only publish arm64 wheels for macOS.
The queue subscribers no longer emit spurious deprecation warnings from their background dispatch threads.
Calling the deprecated pop_thread or pop_greenlet on ~logbook.GroupHandler and ~logbook.more.DedupHandler now attributes the DeprecationWarning to the calling code instead of logbook internals.
See CHANGES
See CHANGES
When used as a context manager, handlers, flags, and processors would swallow a raised BaseException and raise a TypeError #500.
See CHANGES
See CHANGES
Required files were missing from the source distribution (sdist).
See CHANGES
See CHANGES
Python 3.14 support
Python 3.14 free-threading support (beta). This does not extend to all optional dependencies. At the time of writing, the following extras are not supported due to their dependencies pulling in C extensions which do not support free-threading:
brotli
nteventlog
sqlalchemy
Wheels are built for Windows ARM64
The way handlers, flags, and processors are activated is now based on contextvars, and has been completely rewritten. See deprecations since many methods have been deprecated and are mere aliases to the new defaults.
Cython has been replaced with Rust for the speedups module.
Logbook[brotli] depends on brotlicffi on non-CPython implementations.
logbook.__version__. Use importlib.metadata instead.
There are now only two ways to activate ~logbook.Handler, ~logbook.Flags, and ~logbook.Processor instances.
Either globally:
handler = StderrHandler()
with handler.applicationbound():
...
handler.push_application()
try:
...
finally:
handler.pop_application()
or for the current context:
handler = StderrHandler()
with handler:
...
handler.push_context()
try:
...
finally:
handler.pop_context()
The following methods on ~logbook.Handler, ~logbook.Flags, and ~logbook.Processor:
push_greenlet is an alias to push_context
pop_greenlet is an alias to pop_context
push_thread is an alias to push_context
pop_thread is an alias to pop_context
with obj.greenletbound(), use with obj: instead.
with obj.threadbound(), use with obj: instead.
with obj.contextbound(), use with obj: instead.
logbook.concurrency.enable_gevent, use gevent.monkey instead.
logbook.concurrency.is_gevent_enabled.
logbook.concurrency.new_fine_grained_lock.
The compression extra. Replace Logbook[compression] with Logbook[brotli] if you are using BrotliCompressionHandler
Logger.warn. Use Logger.warning instead.
logbook.notifiers.GrowlHandler
logbook.notifiers.BoxcarHandler
logbook.notifiers.NotifoHandler
logbook.more.TwitterHandler
logbook.more.TwitterFormatter
The previous contextvars implementation (used by push_context, pop_context, and contextbound) was completely broken. The new implementation supersedes the previous default (using thread locals), and is now the default.
See CHANGES
See CHANGES
TimedRotatingFileHandler was sensitive to changes in the current work directory if filename was a relative path.
Wheels are built for Linux arm64
See CHANGES
See CHANGES
Fixed crash on Python 3.12+ in speedups extension module.
See CHANGES
See CHANGES
Python 3.13 support
Fixed deprecation warnings on Python 3.12
Dropped support for Python 3.8
See CHANGES
See CHANGES
Released on November 11th, 2023
Ensure setuptools can read version number statically during build
See CHANGES
See CHANGES
Released on October 3rd, 2023
Dropped support for Python 3.7
Passing (keyfile, certfile) to MailHandler's secure argument is deprecated in favour of passing an ssl.SSLContext.
Python 3.12 support
Fix various deprecation warnings.
Released on July 30th, 2023
Dropped support for Python 2.7, 3.5, and 3.6.
Uses pyproject.toml based build.
Added nteventlog extra for NTEventLogHandler.
Supports SQLAlchemy 1.4 and 2.0.
Fix various deprecation warnings.
exc_info arg may be a BaseException instance (thanks Mattijs Ugen)
FileHandler supports path-like objects.
Fixed bug which prevented compilation on Cython 3
Wheels are generated for more platforms and architectures
Fixed deprecated imports from collections module.
Released on October 16th, 2019
Fixed deprecated imports from collections module.
Released on August 21st, 2019 - No changes
Released on August 21st, 2019
No changes
Added support for asyncio and contextvars
Released on August 20th, 2019
Added support for asyncio and contextvars
Nothing published for this version
Nothing published for this version
Fixed deprecated regular expression pattern (thanks Tsuyoshi Hombashi)
Released on October 14th, 2018
Fixed deprecated regular expression pattern (thanks Tsuyoshi Hombashi)
Fixed TimedRotatingFileHandler rotation (thanks Tucker Beck)
Added support for checking if trace logs have been emitted in TestHandler (thanks @thedrow)
Released on May 15th, 2018
Added support for checking if trace logs have been emitted in TestHandler (thanks @thedrow)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Added support for controlling rotating file names -- Logbook now allows users to customize the formatting of rollover/rotating files (thanks Tucker Be
Released on March 5th, 2018
Added support for controlling rotating file names -- Logbook now allows users to customize the formatting of rollover/rotating files (thanks Tucker Beck)
Nothing published for this version
Nothing published for this version
Added a handler for Riemann (thanks Šarūnas Navickas)
Released on July 13th 2017
Added a handler for Riemann (thanks Šarūnas Navickas)
Added a handler for Slack (thanks @jonathanng)
Colorizing mixin can now force coloring on or off (thanks @ayalash)
Added support for timezones for log timestamp formatting (thanks Mattijs Ugen)
Released on June 26th 2016
Added support for timezones for log timestamp formatting (thanks Mattijs Ugen)
Logbook has been a 0.x long enough to earn its 1.0.0 bump!
Logbook now uses SemVer for its versioning scheme
Various improvements to MailHandler and the usage of TLS/SMTP SSL (thanks Frazer McLean)
Fix log colorizing on Windows (thanks Frazer McLean)
Coverage reports using coveralls.io
Dropped compatibility for Python 3.2. At this point we did not actually remove any code that supports it, but the continuous integration tests no longer check against it, and we will no longer fix compatibility issues with 3.2.
Better coverage and tests on Windows (thanks Frazer McLean)
Added enable() and disable() methods for loggers (thanks Frazer McLean)
Many cleanups and overall project improvements (thanks Frazer McLean)
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
Added logbook.utils.deprecated to automatically emit warnings when certain functions are called (Thanks Ayala Shachar)
Released on November 24th 2015
Added logbook.utils.deprecated to automatically emit warnings when certain functions are called (Thanks Ayala Shachar)
Added logbook.utils.suppressed_deprecations context to temporarily suppress deprecations (Thanks Ayala Shachar)
Added logbook.utils.logged_if_slow to emit logs when certain operations exceed a time threshold (Thanks Ayala Shachar)
Many PEP8 fixes and code cleanups (thanks Taranjeet Singh and Frazer McLean)
TestHandler constructor now receives an optional force_heavy_init=True, forcing all records to heavy-initialize
Windows-specific fixes and CI configuration (Thanks Frazer McLean)
Released on November 5th 2015
Windows-specific fixes and CI configuration (Thanks Frazer McLean)
Several Unicode-specific fixes (Thanks Frazer McLean)
Documentation cleanups
Released on September 29th 2015
Released on September 29th 2015
Fix importing issue with SQLAlchemy ticketing handler
Nothing published for this version
Released on September 29th 2015
Released on September 29th 2015
Added TRACE log level for enabling logs below DEBUG
Improved SQLAlchemy session management (thanks @fintan)
Removed the bubble argument from NullHandler, preventing many future confusions
Small bugfix supporting exc_info=False without breaking formatting
Released on August 4th 2015
Small bugfix supporting exc_info=False without breaking formatting
Removed the global handler which was installed by default so far. The rationale is to ease adoption for 3rd party libraries who don't want output to g
Released on July 14th 2015
Removed the global handler which was installed by default so far. The rationale is to ease adoption for 3rd party libraries who don't want output to go to stderr by default. The old behavior can still be restored by setting the LOGBOOK_INSTALL_DEFAULT_HANDLER environment variable
Fix small Python 3 compatibility issues
Released on May 4th 2015 - Minor fixes
Released on May 4th 2015
Minor fixes
Added frame correction option, to properly mark log record origins (Thanks Roey Darwish)
Released on February 12th 2015
Added frame correction option, to properly mark log record origins (Thanks Roey Darwish)
Fixed MailHandler infinite recursion bug (Thanks Tal Yalon)
Fix support for gevent, along with various other fixes (Thanks Tal Yalon)
Released on November 30th 2014
Fix support for gevent, along with various other fixes (Thanks Tal Yalon)
Released on November 11th 2014. Codename "improve_some_more"
Released on November 11th 2014. Codename "improve_some_more"
Added Pushover handler (thanks @owo)
Default logging format now includes seconds and microseconds (#110)
Several fixes regarding possible deadlocks in log formatting (thanks Guy Rozendorn)
Fixed packaging so that the speedups module now gets packaged by default (#122)
ThreadedWrapperHandler now supports maxsize (#121) (thanks Ken Jung)
Fixes in rotating handlers (thanks zhangliyong)
Added Pushover handler (thanks Ossama W. Obeid)
RedisHandler now supports lpush as an option (thanks Bruno Rocha)
Released on May 12th 2014. Codename "not_just_yet"
Released on May 12th 2014. Codename "not_just_yet"
Restored Python 3.2 support (thanks @rnortman)
NullHandlers now respect filters - allows to only drop/mute certain records (#73)
redirect_logging now sets the legacy root logger's level to DEBUG by default. This can be changed by specifying set_root_logger_level=False (#96)
Bugfixes
Released on October 3rd 2013. Codename "why_not_production_ready"
Released on October 3rd 2013. Codename "why_not_production_ready"
Added Redis handler (Thanks a lot @guillermo-carrasco for this PR)
Fixed email encoding bug (Thanks Raphaël Vinot)
Drop 2.5, 3.2 support, code cleanup
Released on August 10th 2013.
Drop 2.5, 3.2 support, code cleanup
The exc_info argument now accepts True, like in the standard logging module
Fixed Python 3.x compatibility, including speedups
Released on June 2nd 2013.
Fixed Python 3.x compatibility, including speedups
Dropped Python 2.4 support. Python 2.4 support caused a lot of hacks in the code and introduced duplication to the test code. In addition, it is impossible to cover 2.4-3.x with a single tox installation, which may introduce unwitting code breakage. Travis also does not support Python 2.4 so the chances of accidentally breaking this support were very high as it was...
Released on December 12th. Codename "121212"
Released on December 12th. Codename "121212"
Fixed several outstanding encoding problems, thanks to @dvarazzo.
Merged in minor pull requests (see https://github.com/getlogbook/logbook/pulls?q=is%3Aclosed)
Released on October 24th. Codename "Phoenix"
Released on October 24th. Codename "Phoenix"
Added preliminary RabbitMQ and CouchDB support.
Added logbook.notifiers.NotifoHandler
channel is now documented to be used for filtering purposes if wanted. Previously this was an opaque string that was not intended for filtering of any kind.
Deprecated logbook.RotatingFileHandlerBase because the interface was not flexible enough.
Released on October 23rd. Codename "Informant"
Added logbook.more.ColorizingStreamHandlerMixin and logbook.more.ColorizedStderrHandler
Deprecated logbook.RotatingFileHandlerBase because the interface was not flexible enough.
Provided basic Python 3 compatibility. This did cause a few smaller API changes that caused minimal changes on Python 2 as well. The deprecation of the logbook.RotatingFileHandlerBase was a result of this.
Added support for Python 2.4
Added batch emitting support for handlers which now makes it possible to use the logbook.more.FingersCrossedHandler with the logbook.MailHandler.
Moved the ~logbook.FingersCrossedHandler handler into the base package. The old location stays importable for a few releases.
Added logbook.GroupHandler that buffers records until the handler is popped.
Added logbook.more.ExternalApplicationHandler that executes an external application for each log record emitted.
Bugfix release, Released on September 22nd.
Bugfix release, Released on September 22nd.
Fixes Python 2.5 compatibility.
Released on September 21st. Codename "Walls of Text"
Released on September 21st. Codename "Walls of Text"
Implemented default with statement for handlers which is an alias for threadbound.
applicationbound and threadbound return the handler now.
Implemented channel recording on the log records.
The logbook.more.FingersCrossedHandler now is set to ERROR by default and has the ability to create new loggers from a factory function.
Implemented maximum buffer size for the logbook.more.FingersCrossedHandler as well as a lock for thread safety.
Added ability to filter for context.
Moved bubbling flags and filters to the handler object.
Moved context processors on their own stack.
Removed the iter_context_handlers function.
Renamed NestedHandlerSetup to ~logbook.NestedSetup because it can now also configure processors.
Added the logbook.Processor class.
There is no difference between logger attached handlers and context specific handlers any more.
Added a function to redirect warnings to logbook (logbook.compat.redirected_warnings).
Fixed and improved logbook.LoggerGroup.
The logbook.TestHandler now keeps the record open for further inspection.
The traceback is now removed from a log record when the record is closed. The formatted traceback is a cached property instead of a function.
Added ticketing handlers that send logs directly into a database.
Added MongoDB backend for ticketing handlers
Added a logbook.base.dispatch_record function to dispatch records to handlers independently of a logger (uses the default record dispatching logic).
Renamed logger_name to channel.
Added a multi processing log handler (logbook.more.MultiProcessingHandler).
Added a twitter handler.
Added a ZeroMQ handler.
Added a Growl handler.
Added a Libnotify handler.
Added a monitoring file handler.
Added a handler wrapper that moves the actual handling into a background thread.
The mail handler can now be configured to deliver each log record not more than n times in m seconds.
Added support for Python 2.5
Added a logbook.queues.SubscriberGroup to deal with multiple subscribers.
Added a logbook.compat.LoggingHandler for redirecting logbook log calls to the standard library's logging module.
First public release.
First public release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →