• python日志解决方案-loguru


    loguru

    pip install loguru
    官方文档 https://loguru.readthedocs.io/en/stable/overview.html

    教程

    from loguru import logger
    
    logger.add("interface_log_{time}.log", rotation="500MB", encoding="utf-8", enqueue=True, compression="zip", retention="10 days")
    logger.info("中文")
    
    • enqueue=True 代表异步写入,官方的大概意思是:在多进程同时往日志文件写日志的时候使用队列达到异步功效
    • rotation 可以理解成日志的创建时机,可以有多种写法
      • rotation="500 MB" :当日志文件达到500MB时就会重新生成一个文件
      • rotation="12:00" :每天12点就会创建新的文件、
      • rotation="1 week" :每隔一周创建一个log
    • retention 配置日志的最长保留时间,官方例子: "1 week, 3 days"、"2 months"
    • compression 配置文件的压缩格式,可以配置常见的格式 zip、tar、gz、tar.gz 等

    示例

    import datetime
    from loguru import logger
    import os
    
    
    class LogHandler:
        """
        按日期创建日志文件
        info、error类型的日志分别写入不同的文件,info日志包含了error日志。
        """
        PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        LOG_PATH = os.path.join(PATH, "logs")
        today_now = f"{datetime.datetime.now().year}_{datetime.datetime.now().month}_{datetime.datetime.now().day}"
        logger.add(os.path.join(LOG_PATH, f'info_{today_now}.log'), rotation="00:01", format="{time} {level} -> {message}",
                   encoding="utf-8", level="INFO")
        logger.add(os.path.join(LOG_PATH, f"error_{today_now}.log"), rotation="00:01", format="{time} {level} -> {message}",
                   encoding="utf-8", level="ERROR")
    
        @staticmethod
        def log():
            return logger
    
    
    if __name__ == '__main__':
        log = LogHandler.log()
        log.info("就是这么简单,调用即可")
    
        # 捕捉函数运行过程中的错误,输出日志
        @log.catch
        def my_function(x, y, z):
            # An error? It's caught anyway!
            return 1 / (x + y + z)
    
    
        my_function(0, 0, 0)
    
    
        def mistake(a, b):
            try:
                print(a / b)
            except ZeroDivisionError:
                # 将捕获到的错误输出
                log.exception("?")
    
    
        log.info("开始执行函数")
        mistake(1, 0)
        log.info("函数执行完成!")
    
    
  • 相关阅读:
    [剑指Offer] 从尾到头打印链表
    [剑指Offer] 替换空格
    [剑指Offer] 二维数组中的查找
    [LeetCode] 53. Maximum Subarray
    [LeetCode] 283. Move Zeroes
    haproxy + rabbitmq + keepalived的高可用环境搭建
    iis7下站点日志默认位置
    在vs2012中配置使用iisexpress
    tomcat配置域名,单项目指定多域名
    httpget和post
  • 原文地址:https://www.cnblogs.com/jianjiacangcang/p/15059167.html
Copyright © 2020-2023  润新知