zoukankan      html  css  js  c++  java
  • python日志loguru

    文档:https://loguru.readthedocs.io/en/stable/overview.html#installation

    pip install loguru
    

    使用

    基本使用

    ##终端日志
    from loguru import logger
    logger.debug("这是一条debug日志")
    
    
    ###输出到文件
    from loguru import logger
    
    logger.add("file_{time}.log")
    
    logger.debug("这是一条debug日志")
    logger.info("这是一条info日志")
    
    ##日志规则
    #logger.add("file.log", format="{time} {level} {message}", filter="", level="INFO")
    
    #默认的输出格式是上面的内容,有时间、级别、模块名、行号以及日志信息
    
    logger.add(f"{log_path}/log{t}.log", rotation="500MB", encoding="utf-8", enqueue=True,
                   format="{time:YYYY-MM-DD HH:mm:ss} |  {name} | {line} | {message}", retention="10 days")
    
    #这个格式比较好
    logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}")
    2020-06-24 at 20:49:04 | INFO | hehhehejhjkfffffffffffff--------->>>jhgfdhjkdj----------<>jh
    2020-06-24 at 20:49:15 | INFO | jfsdghdjkhf
    
    logger.debug("这是一条debug日志")
    logger.info("这是一条info日志")
    
    
    ##add方法
    def add(
        self,
        sink,
        *,
        level=_defaults.LOGURU_LEVEL,
        format=_defaults.LOGURU_FORMAT,
        filter=_defaults.LOGURU_FILTER,
        colorize=_defaults.LOGURU_COLORIZE,
        serialize=_defaults.LOGURU_SERIALIZE,
        backtrace=_defaults.LOGURU_BACKTRACE,
        diagnose=_defaults.LOGURU_DIAGNOSE,
        enqueue=_defaults.LOGURU_ENQUEUE,
        catch=_defaults.LOGURU_CATCH,
        **kwargs
    ):
        r"""Add a handler sending log messages to a sink adequately configured.
    
    
    

    sink 可以传入一个 file 对象,例如 sys.stderr 或者 open('file.log', 'w') 都可以。
    sink 可以直接传入一个 str 字符串或者 pathlib.Path 对象,其实就是代表文件路径的,如果识别到是这种类型,它会自动创建对应路径的日志文件并将日志输出进去。
    sink 可以是一个方法,可以自行定义输出实现。
    sink 可以是一个 logging 模块的 Handler,比如 FileHandler、StreamHandler 等等,或者上文中我们提到的 CMRESHandler 照样也是可以的,这样就可以实现自定义 Handler 的配置。
    sink 还可以是一个自定义的类,具体的实现规范可以参见官方文档。

    删除 sink:

    from loguru import logger
     
    trace = logger.add('runtime.log')  ##获取返回值
    logger.debug('this is a debug message')
    logger.remove(trace)  ##删除旧的日志文件
    logger.debug('this is another debug message')
    

    日志文件管理方式

    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")    # 文件时间过长就会创建新文件
    
    logger.add("file_X.log", retention="10 days")  # 一段时间后会清空
    
    logger.add("file_Y.log", compression="zip")    # 保存zip格式
    
    logger.add('runtime_{time}.log', rotation='1 week')
    
    ##输出字符串格式化
    logger.info('If you are using Python {}, prefer {feature} of course!', 3.6, feature='f-strings')
    
    n1 = "cool"
    n2 = [1, 2, 3]
    logger.info(f'If you are using Python {n1}, prefer {n2} of course!')
    
    

    其他参数

    logger.add("somefile.log", enqueue=True)  # 异步写入
    
    logger.add("somefile.log", serialize=True)  # 序列化为json
    

    创建多个文件处理器对象并解决中文乱码问题

    # coding=utf-8
    import os
    import sys
    from loguru import logger
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    log_file_path = os.path.join(BASE_DIR, 'Log/my.log')
    err_log_file_path = os.path.join(BASE_DIR, 'Log/err.log')
    
    logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
    # logger.add(s)
    logger.add(log_file_path, rotation="500 MB", encoding='utf-8')  # Automatically rotate too big file
    logger.add(err_log_file_path, rotation="500 MB", encoding='utf-8',
               level='ERROR')  # Automatically rotate too big file
    logger.debug("That's it, beautiful and simple logging!")
    logger.debug("中文日志可以不")
    logger.error("严重错误")
    
    

    字符串格式化

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

    装饰器

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

    单独的日志模块工具

    项目路径下的util文件夹之类的,不能直接放项目路径下,不然路径会生成错误

    """
    操作日志记录
    """
    import time
    from loguru import logger
    from pathlib import Path
     
    project_path = Path.cwd().parent       ##获取当前模块文件所在目录的上一层
    log_path = Path(project_path, "log")   ##产生日志目录字符串
    t = time.strftime("%Y_%m_%d")          ##2020_06_24
     
    class Loggings:
        __instance = None
        logger.add(f"{log_path}/interface_log_{t}.log", rotation="500MB", encoding="utf-8", enqueue=True,
                   retention="10 days")
     
        def __new__(cls, *args, **kwargs):
            if not cls.__instance:
                cls.__instance = super(Loggings, cls).__new__(cls, *args, **kwargs)
     
            return cls.__instance
     
        def info(self, msg):
            return logger.info(msg)
     
        def debug(self, msg):
            return logger.debug(msg)
     
        def warning(self, msg):
            return logger.warning(msg)
     
        def error(self, msg):
            return logger.error(msg)
     
    loggings = Loggings()
    if __name__ == '__main__':
        loggings.info("中文test")
        loggings.debug("中文test")
        loggings.warning("中文test")
        loggings.error("中文test")
     
        logger.info('If you are using Python {}, prefer {feature} of course!', 3.6, feature='f-strings')
        n1 = "cool"
        n2 = [1, 2, 3]
        logger.info(f'If you are using Python {n1}, prefer {n2} of course!')
    
    

    项目里loguru使用

    根据催庆才的项目,还有一种用法
    在项目的根目录下创建setting文件并使用

    logger.add(env.str('LOG_RUNTIME_FILE', 'runtime.log'), level='DEBUG', rotation='1 week', retention='20 days')
    logger.add(env.str('LOG_ERROR_FILE', 'error.log'), level='ERROR', rotation='1 week')
    
    

    初步实验了一下

  • 相关阅读:
    UE4中集成ProtoBuf
    QT之打印 QPrinter
    qt界面嵌入外部进程界面
    QAxWidget 妙用
    UE4嵌入Qt5 三维可视化案例
    QSS入门(一)
    Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕
    成品软件二次开发排第三,低代码的应用场景有哪些?
    React 并发功能体验-前端的并发模式已经到来。
    Docker与k8s的恩怨情仇(三)—后浪Docker来势汹汹
  • 原文地址:https://www.cnblogs.com/g2thend/p/12539923.html
Copyright © 2011-2022 走看看