All Versions
Latest Version
Avg Release Cycle
95 days
Latest Release
848 days ago

Changelog History
Page 1

  • v0.6.0 Changes

    January 29, 2022
    • Remove internal use of pickle.loads() to fix the (finally rejected) 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 <>).
  • v0.5.3 Changes

    September 20, 2020
    • 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 <>_).
  • v0.5.2 Changes

    September 06, 2020
    • ๐Ÿ›  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 <>).
  • v0.5.1 Changes

    June 12, 2020
    • ๐ŸŒฒ 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 <>_).
  • v0.5.0 Changes

    May 17, 2020
    • โœ‚ 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 <>_).
  • v0.4.1 Changes

    January 19, 2020
    • ๐Ÿ—„ 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 <>_).
  • v0.4.0 Changes

    December 02, 2019
    • โž• Add support for coroutine functions used as sinks and add the new logger.complete() asynchronous method to await them (#171 <>_).
    • โž• Add a way to filter logs using one level per module in the form of a dict passed to the filter argument (#148 <>_).
    • โž• Add type hints to annotate the public methods using a .pyi stub file (#162 <>_).
    • โž• Add support for copy.deepcopy() of the logger allowing multiple independent loggers with separate set of handlers (#72 <>_).
    • โž• Add the possibility to convert datetime to UTC before formatting (in logs and filenames) by adding "!UTC" at the end of the time format specifier (#128 <>_).
    • โž• Add the level name as the first argument of namedtuple returned by the .level() method.
    • โœ‚ Remove class objects from the list of supported sinks and restrict usage of **kwargs in .add() to file sink only. User is in charge of instantiating sink and wrapping additional keyword arguments if needed, before passing it to the .add() method.
    • ๐Ÿ”ง Rename the logger.configure() keyword argument patch to patcher so it better matches the signature of logger.patch().
    • ๐Ÿ›  Fix incompatibility with multiprocessing on Windows by entirely refactoring the internal structure of the logger so it can be inherited by child processes along with added handlers (#108 <>_).
    • Fix AttributeError while using a file sink on some distributions (like Alpine Linux) missing the os.getxattr and os.setxattr functions (#158 <>, thanks @joshgordon <>).
    • ๐Ÿ›  Fix values wrongly displayed for keyword arguments during exception formatting with diagnose=True (#144 <>_).
    • ๐Ÿ›  Fix logging messages wrongly chopped off at the end while using standard logging.Handler sinks with .opt(raw=True) (#136 <>_).
    • ๐Ÿ›  Fix potential errors during rotation if destination file exists due to large resolution clock on Windows (#179 <>_).
    • ๐Ÿ›  Fix an error using a filter function "by name" while receiving a log with record["name"] equals to None.
    • ๐Ÿ›  Fix incorrect record displayed while handling errors (if catch=True) occurring because of non-picklable objects (if enqueue=True).
    • Prevent hypothetical ImportError if a Python installation is missing the built-in distutils module (#118 <>_).
    • Raise TypeError instead of ValueError when a logger method is called with argument of invalid type.
    • Raise ValueError if the built-in format() and filter() functions are respectively used as format and filter arguments of the add() method. This helps the user to understand the problem, as such a mistake can quite easily occur (#177 <>_).
    • โœ‚ Remove inheritance of some record dict attributes to str (for "level", "file", "thread" and "process").
    • Give a name to the worker thread used when enqueue=True (#174 <>, thanks @t-mart <>).
  • v0.3.2 Changes

    July 21, 2019
    • Fix exception during import when executing Python with -s and -S flags causing site.USER_SITE to be missing (#114 <>_).
  • v0.3.1 Changes

    July 13, 2019
    • ๐Ÿ›  Fix retention and rotation issues when file sink initiliazed with delay=True (#113 <>_).
    • ๐Ÿ›  Fix "sec" no longer recognized as a valid duration unit for file rotation and retention arguments.
    • ๐Ÿ‘ป Ensure stack from the caller is displayed while formatting exception of a function decorated with @logger.catch when backtrace=False.
    • Modify datetime used to automatically rename conflicting file when rotating (it happens if file already exists because "{time}" not presents in filename) so it's based on the file creation time rather than the current time.
  • v0.3.0 Changes

    June 29, 2019
    • โœ‚ Remove all dependencies previously needed by loguru (on Windows platform, it solely remains colorama and win32-setctime).
    • โž• Add a new logger.patch() method which can be used to modify the record dict on-the-fly before it's being sent to the handlers.
    • Modify behavior of sink option backtrace so it only extends the stacktrace upward, the display of variables values is now controlled with the new diagnose argument (#49 <>_).
    • ๐Ÿ”„ Change behavior of rotation option in file sinks: it is now based on the file creation time rather than the current time, note that proper support may differ depending on your platform (#58 <>_).
    • ๐Ÿšฉ Raise errors on unknowns color tags rather than silently ignoring them (#57 <>_).
    • โž• Add the possibility to auto-close color tags by using </> (e.g. <yellow>message</>).
    • โž• Add coloration of exception traceback even if diagnose and backtrace options are False.
    • โž• Add a way to limit the depth of formatted exceptions traceback by setting the conventional sys.tracebacklimit variable (#77 <>_).
    • Add __repr__ value to the logger for convenient debugging (#84 <>_).
    • โœ‚ Remove colors tags mixing directives (e.g. <red,blue>) for simplification.
    • ๐Ÿ‘ป Make the record["exception"] attribute unpackable as a (type, value, traceback) tuple.
    • Fix error happening in some rare circumstances because frame.f_globals dict did not contain "__name__" key and hence prevented Loguru to retrieve the module's name. From now, record["name"] will be equal to None in such case (#62 <>_).
    • ๐Ÿ›  Fix logging methods not being serializable with pickle and hence raising exception while being passed to some multiprocessing functions (#102 <>_).
    • ๐Ÿ›  Fix exception stack trace not colorizing source code lines on Windows.
    • ๐Ÿ›  Fix possible AttributeError while formatting exceptions within a celery task (#52 <>_).
    • ๐Ÿ›  Fix logger.catch decorator not working with generator and coroutine functions (#75 <>_).
    • ๐Ÿ›  Fix record["path"] case being normalized for no necessary reason (#85 <>_).
    • ๐Ÿ›  Fix some Windows terminal emulators (mintty) not correctly detected as supporting colors, causing ansi codes to be automatically stripped (#104 <>_).
    • ๐Ÿ›  Fix handler added with enqueue=True stopping working if exception was raised in sink although catch=True.
    • ๐Ÿ›  Fix thread-safety of enable() and disable() being called during logging.
    • โœ… Use Tox to run tests (#41 <>_).