天天看点

Python 中更优雅的日志记录方案-第三方日志框架loguru

Python 中更优雅的日志记录方案-第三方日志框架loguru
Python 中更优雅的日志记录方案-第三方日志框架loguru

项目地址 github: ​​https://github.com/Delgan/loguru​​​ 文档:​​https://loguru.readthedocs.io/en/stable/index.html​​

安装

pip install loguru      

1、输出日志

from loguru import logger
logger.debug("这是一条debug日志")      
Python 中更优雅的日志记录方案-第三方日志框架loguru

终端执行后出现带颜色的日志,挺酷的

2、输出到文件

from loguru import logger

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

logger.debug("这是一条debug日志")
logger.info("这是一条info日志")      

目录下多出一个日志文件 :file_2019-03-14_19-53-25_661314.log

3、日志规则

设置日志格式,过滤器,日志级别

from loguru import logger

logger.add("file.log", format="{time} {level} {message}", filter="", level="INFO")

logger.debug("这是一条debug日志")
logger.info("这是一条info日志")      

输出

2019-03-14T20:01:25.392454+0800 INFO 这是一条info日志      

4、日志文件

文件管理方式

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格式      

5、其他参数

logger.add("somefile.log", enqueue=True)  # 异步写入

logger.add("somefile.log", serialize=True)  # 序列化为json      

6、时间格式化

logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}")      

配合notifiers模块

github: ​​​https://github.com/notifiers/notifiers​​​ 文档:​​https://notifiers.readthedocs.io/en/latest/​​

7、在工程中创建多个文件处理器对象并解决中文乱码问题

例子1:

# 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("严重错误")      

例子2:

import os

from loguru import logger

from setting import BASE_DIR


class GetLogging:
    """
    日志配置
    """

    def __init__(self):
        # 错误日志
        logger.add(
            os.path.join(BASE_DIR, "logs/ERROR/{time:YYYY-MM-DD}.log"),
            format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
            filter=lambda x: True if x["level"].name == "ERROR" else False,
            rotation="00:00", retention=7, level='ERROR', encoding='utf-8'
        )
        # 成功日志
        logger.add(
            os.path.join(BASE_DIR, "logs/SUCCESS/{time:YYYY-MM-DD}.log"),
            format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
            filter=lambda x: True if x["level"].name == "SUCCESS" else False,
            rotation="00:00", retention=7, level='SUCCESS', encoding='utf-8',
        )
        # Default日志
        logger.add(
            os.path.join(BASE_DIR, "logs/Default/{time:YYYY-MM-DD}.log"),
            format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
            rotation="00:00", retention=7, level='DEBUG', encoding='utf-8'
        )

        self.logger = logger

    def get(self):
        return self.logger


globalLog = GetLogging().get()