Versions are year-based with a strict backward compatibility policy. The third digit is only for regressions.
structlog.processors.format_exc_infonow support passing of Exceptions on Python 3.
- Clean up the context when exiting
structlog.threadlocal.tmp_bindin case of exceptions. 
- Be more more lenient about missing
structlog.dev.ConsoleRendererthat renders the event dictionary aligned and with colors.
- Use six for compatibility.
structlog.processors.UnicodeDecoderthat will decode all byte string values in an event dictionary to Unicode.
structlog.processors.JSONRendererwhich allows for using different (possibly faster) JSON encoders than the standard library.
- Allow empty lists of processors. This is a valid use case since #26 has been merged. Before, supplying an empty list resulted in the defaults being used.
- Prevent Twisted’s
log.errfrom quoting strings rendered by
- Better support of
- Add option to specify target key in
- Pass positional arguments to stdlib wrapped loggers that use string formatting. 
structlogis now dually licensed under the Apache License, Version 2 and the MIT license. Therefore it is now legal to use structlog with GPLv2-licensed projects. 
- Fixed a memory leak in greenlet code that emulates thread locals. It shouldn’t matter in practice unless you use multiple wrapped dicts within one program that is rather unlikely. 
structlog.PrintLoggernow is thread-safe.
- Test Twisted-related code on Python 3 (with some caveats).
- Drop support for Python 3.2. There is no justification to add complexity for a Python version that nobody uses. If you are one of the 0.350% that use Python 3.2, please stick to the 0.4 branch; critical bugs will still be fixed.
- Officially support Python 3.4.
- Allow final processor to return a dictionary. See the adapting chapter. 
from structlog import *works now (but you still shouldn’t use it).
- Don’t cache proxied methods in
structlog.threadlocal._ThreadLocalDictWrapper. This doesn’t affect regular users.
- Various doc fixes.
structlog.processors.StackInfoRendererfor adding stack information to log entries without involving exceptions. Also added it to default processor chain. 
- Allow optional positional arguments for
structlog.get_loggerthat are passed to logger factories. The standard library factory uses this for explicit logger naming. 
structlog.processors.ExceptionPrettyPrinterfor development and testing when multiline log entries aren’t just acceptable but even helpful.
- Allow the standard library name guesser to ignore certain frame names. This is useful together with frameworks.
- Add meta data (e.g. function names, line numbers) extraction for wrapped stdlib loggers. 
- Greatly enhanced and polished the documentation and added a new theme based on Write The Docs, requests, and Flask.
- Add Python Standard Library-specific BoundLogger that has an explicit API instead of intercepting unknown method calls.
structlog.ReturnLoggernow allows arbitrary positional and keyword arguments.
- Add Twisted-specific BoundLogger that has an explicit API instead of intercepting unknown method calls.
- Allow logger proxies that are returned by
structlog.wrap_loggerto cache the BoundLogger they assemble according to configuration on first use. See the chapter on performance and the
- Extract a common base class for loggers that does nothing except keeping the context state.
This makes writing custom loggers much easier and more straight-forward.
- Promote to stable, thus henceforth a strict backward compatibility policy is put into effect.
structlog.processors.KeyValueRendererfor more predictable log entries with any
structlog.PrintLoggernow uses proper I/O routines and is thus viable not only for examples but also for production.
- Enhance Twisted support by offering JSONification of non-structlog log entries.
- Allow for custom serialization in