美文网首页
更优美的python日志管理库Loguru

更优美的python日志管理库Loguru

作者: Xyxtank | 来源:发表于2020-03-15 12:55 被阅读0次

    一、Loguru简介

    Loguru的主旨就是让程序员能方便优美的实现日志记录。您还记得配置记录器的繁琐过程吗?因为对此感到厌烦?让我们看看以前python日志记录器的创建过程吧。

    import logging
    
    #创建日志级别
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)
    
    #创建日志文件
    handler_warn = logging.FileHandler('warning_log.txt')
    handler_warn.setLevel(logging.INFO)
    
    #定义日志格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler_warn.setFormatter(formatter)
    
    #将日志处理程序记录到记录器
    logger.addHandler(handler_warn)
    

    以上还是最简单的配置过程,是否感到很繁琐。确实如此,但是记录是每个应用程序的基础,并简化了调试过程。使用Loguru,您没有理由不从一开始就使用日志记录,这很简单。只需要引入loguru库即可,而且loguru的性能也非常好,因为Loguru的关键功能将以C语言实现,以实现最高速度。

    from loguru import logger
    

    另外,该库旨在通过添加一堆有用的功能来减轻Python日志记录的痛苦,这些功能可以解决标准记录器的问题。在您的应用程序中使用日志应该是自动的,Loguru试图使其变得既愉快又强大。

    二、Loguru安装

    安装方法很简单。

    pip install loguru
    

    三、Loguru使用

    1、简单使用

    from loguru import logger
    
    logger.debug("That's it, beautiful and simple logging!")
    

    结果显示彩色,非常的优美。

    2、日志格式

    根据自己的需求配置日志格式,也非常简单,只需要简单配置即可完成。如下:

    import sys
    from loguru import logger
    
    #配置日志格式
    logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
    
    logger.info("That's it, beautiful and simple logging!")
    logger.debug("That's debug")
    logger.warning("That's warning")
    

    结果,不同的颜色显示:

    3、日志文件

    如果要将记录的消息保存到文件,则只需使用字符串路径作为接收器。配置如下:

    logger.add("file_{time}.log")
    

    如果需要设置日志文件大小、删除较旧的日志文件或希望在关闭时压缩文件,并设置压缩格式,这些都可以进行配置,而且配置起来非常简单。如下:

    #rotation参数
    logger.add("file_1.log", rotation="500 MB")    # 设置日志文件大小
    logger.add("file_2.log", rotation="12:00")     # 中午12点创建日志文件
    logger.add("file_3.log", rotation="1 week")    # 一周创建一个日志文件
    
    #retention参数
    logger.add("file_X.log", retention="10 days")  # 日志文件最长保留 10 天
    
    #compression参数
    logger.add("file_Y.log", compression="zip")    # 日志文件压缩格式为ZIP
    

    4、字符串格式化

    Loguru倾向于使用更优雅,更强大的{}格式%,日志记录功能实际上等效于str.format()

    logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
    

    结果:

    5、Traceback捕获

    您是否曾经看到程序意外崩溃而没有在日志文件中看到任何内容?您是否注意到没有记录线程中发生的异常?这可以使用catch()装饰器/上下文管理器解决,该管理器可以确保将任何错误信息正确保存到logger中。配置如下:

    import sys
    from loguru import logger
    
    @logger.catch
    def my_function(x, y, z):
        # An error? It's caught anyway!
        return 1 / (x + y + z)
     
    my_function(1,-1,0)
    

    结果:

    6、色彩斑斓的日志

    如果您的终端兼容,Loguru会自动为日志添加颜色。您可以通过使用接收器格式来自定义自己喜欢的样式。配置方式如下:

    logger.add(sys.stderr, colorize=True, format="<green>{time}</green> <level>{message}</level>",level="DEBUG")
    

    结果,DEBUG及以上的信息或被自定义显示样式。

    7、异步写入日志

    logger默认情况下,添加到的所有接收器都是线程安全的。它们不是多进程安全的,但是您可以enqueue通过消息来确保日志的完整性。如果要异步记录,也可以使用相同的参数。

    logger.add("somefile.log", enqueue=True)
    

    8、序列化日志

    希望对日志进行序列化以便于解析或传递日志?使用该serialize参数,每条日志消息在发送到已配置的接收器之前将转换为JSON字符串。

    logger.add(custom_sink_function, serialize=True)
    

    9、配置日期格式

    logger.add(sys.stderr, format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",level="DEBUG")
    
    logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
    logger.debug("That's debug")
    logger.warning("That's warning")
    

    结果:

    10、配置编码格式

    logger.add(log_file_path, rotation="500 MB", encoding='utf8')
    

    还有更多的配置方法,详细请参考官方文档。

    四、参考

    1、官方文档:https://loguru.readthedocs.io/en/stable/overview.html

    2、官方github: https://github.com/Delgan/loguru

    相关文章

      网友评论

          本文标题:更优美的python日志管理库Loguru

          本文链接:https://www.haomeiwen.com/subject/eptkehtx.html