Loguru Versions Save

Python logging made (stupidly) simple

0.7.2

8 months ago
  • Add support for formatting of ExceptionGroup errors (#805).
  • Fix possible RuntimeError when using multiprocessing.set_start_method() after importing the logger (#974).
  • Fix formatting of possible __notes__ attached to an Exception (#980).

0.7.1

8 months ago
  • Add a new context optional argument to logger.add() specifying multiprocessing context (like "spawn" or "fork") to be used internally instead of the default one (#851).
  • Add support for true colors on Windows using ANSI/VT console when available (#934, thanks @tunaflsh).
  • Fix possible deadlock when calling logger.complete() with concurrent logging of an asynchronous sink (#906).
  • Fix file possibly rotating too early or too late when re-starting an application around midnight (#894).
  • Fix inverted "<hide>" and "<strike>" color tags (#943, thanks @tunaflsh).
  • Fix possible untraceable errors raised when logging non-unpicklable Exception instances while using enqueue=True (#329).
  • Fix possible errors raised when logging non-picklable Exception instances while using enqueue=True (#342, thanks @ncoudene).
  • Fix missing seconds and microseconds when formatting timezone offset that requires such accuracy (#961).
  • Raise ValueError if an attempt to use nanosecond precision for time formatting is detected (#855).

0.7.0

1 year ago
  • Update InterceptHandler recipe to make it compatible with Python 3.11 (#654).
  • Add a new watch optional argument to file sinks in order to automatically re-create possibly deleted or changed file (#471).
  • Make patch() calls cumulative instead of overriding the possibly existing patching function (#462).
  • Make sinks added with enqueue=True and catch=False still process logged messages in case of internal exception (#833).
  • Avoid possible deadlocks caused by re-using the logger inside a sink, a signal handler or a __del__ method. Since the logger is not re-entrant, such misuse will be detected and will now generate a RuntimeError (#712, thanks @jacksmith15).
  • Fix file sink rotation using an aware datetime.time for which the timezone was ignored (#697).
  • Fix logs colorization not automatically enabled for Jupyter Notebook and Google Colab (#494).
  • Fix logs colorization not automatically enabled for Github Actions and others CI platforms (#604).
  • Fix logger.complete() possibly hanging forever when enqueue=True and catch=False if internal thread killed due to Exception raised by sink (#647).
  • Fix incompatibility with freezegun library used to simulate time (#600).
  • Raise exception if logger.catch() is used to wrap a class instead of a function to avoid unexpected behavior (#623).

0.6.0

2 years ago
  • Remove internal use of pickle.loads() considered as a security vulnerability referenced as CVE-2022-0329 (#563).
  • Modify coroutine sink to make it discard log messages when loop=None and no event loop is running (due to internally using asyncio.get_running_loop() in place of asyncio.get_event_loop()).
  • Remove the possibility to add a coroutine sink with enqueue=True if loop=None and no event loop is running.
  • Change default encoding of file sink to be utf8 instead of locale.getpreferredencoding() (#339).
  • Prevent non-ascii characters to be escaped while logging JSON message with serialize=True (#575, thanks @ponponon).
  • Fix flake8 errors and improve code readability (#353, thanks @AndrewYakimets).

0.5.3

3 years ago
  • Fix child process possibly hanging at exit while combining enqueue=True with third party library like uwsgi (#309, thanks @dstlmrk).
  • Fix possible exception during formatting of non-string messages (#331).

0.5.2

3 years ago
  • Fix AttributeError within handlers using serialize=True when calling logger.exception() outside of the context of an exception (#296).
  • Fix error while logging an exception containing a non-picklable value to a handler with enqueue=True (#298).
  • Add support for async callable classes (with __call__ method) used as sinks (#294, thanks @jessekrubin).

0.5.1

3 years ago
  • Modify the way the extra dict is used by LogRecord in order to prevent possible KeyError with standard logging handlers (#271).
  • Add a new default optional argument to logger.catch(), it should be the returned value by the decorated function in case an error occurred (#272).
  • Fix ValueError when using serialize=True in combination with logger.catch() or logger.opt(record=True) due to circular reference of the record dict (#286).

0.5.0

3 years ago
  • 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 the extra 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 to logger.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 to logger.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 if enqueue=True to make sure all messages have been processed (#231).
  • Fix possible deadlocks on Linux when multiprocessing.Process() collides with enqueue=True or threading (#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 or compression process (#238).
  • Fix situation where changes made to record["message"] were unexpectedly ignored when opt(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 returning True but not being compatible with colorama is used on Windows (#249).
  • Fix exceptions occurring in coroutine sinks never retrieved and hence causing warnings (#227).

0.4.1

4 years ago
  • Deprecate the ansi parameter of .opt() in favor of colors which is a name more appropriate.
  • Prevent unrelated files and directories to be incorrectly collected thus causing errors during the retention process (#195, thanks @gazpachoking).
  • Strip color markups contained in record["message"] when logging with .opt(ansi=True) instead of leaving them as is (#198).
  • Ignore color markups contained in *args and **kwargs when logging with .opt(ansi=True), leave them as is instead of trying to use them to colorize the message which could cause undesirable errors (#197).

0.1.0

4 years ago
  • Add logger.
  • Add notifier.
  • Add parser.