- Remove the possibility to modify the severity
no
of levels once they have been added in order to prevent surprising behavior (#209). - Add better support for "structured logging" by automatically adding
**kwargs
to theextra
dict besides using these arguments to format the message. This behavior can be disabled by setting the new.opt(capture=False)
parameter (#2). - Add a new
onerror
optional argument tologger.catch()
, it should be a function which will be called when an exception occurs in order to customize error handling (#224). - Add a new
exclude
optional argument tologger.catch()
, is should be a type of exception to be purposefully ignored and propagated to the caller without being logged (#248). - Modify
complete()
to make it callable from non-asynchronous functions, it can thus be used ifenqueue=True
to make sure all messages have been processed (#231). - Fix possible deadlocks on Linux when
multiprocessing.Process()
collides withenqueue=True
orthreading
(#231). - Fix
compression
function not executable concurrently due to file renaming (to resolve conflicts) being performed after and not before it (#243). - Fix the filter function listing files for
retention
being too restrictive, it now matches files based on the pattern"basename(.*).ext(.*)"
(#229). - Fix the impossibility to
remove()
a handler if an exception is raised while the sink'stop()
function is called (#237). - Fix file sink left in an unstable state if an exception occurred during
retention
orcompression
process (#238). - Fix situation where changes made to
record["message"]
were unexpectedly ignored whenopt(colors=True)
, causing "out-of-date"message
to be logged due to implementation details (#221). - Fix possible exception if a stream having an
isatty()
method returningTrue
but not being compatible withcolorama
is used on Windows (#249). - Fix exceptions occurring in coroutine sinks never retrieved and hence causing warnings (#227).