侧边栏壁纸
博主头像
术业有道之编程博主等级

亦是三月纷飞雨,亦是人间惊鸿客。亦是秋霜去叶多,亦是风华正当时。

  • 累计撰写 99 篇文章
  • 累计创建 50 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

python日志框架-loguru的使用

Administrator
2023-01-03 / 0 评论 / 0 点赞 / 374 阅读 / 3921 字

写在前面

最近在用python生态下的包实现一个记录liunx\windows\mac上的操作行为并自动操作这些记录的rpa场景,为了更加方便定位问题,引入了日志框架

一、包依赖

pip3 install loguru

二、写一个logger support

这是完整代码,重点方法已经加了注释,可以直接用

# -*- coding: UTF-8 -*-
import os
import threading

from loguru import logger


class GetLogging:
    """
    日志配置,每天0点创建新文件,7天后清空
    """
    _instance_lock = threading.Lock()
    
    # 使用线程锁进行单例模式的锁定,防止创建多个实例
    def __new__(cls, *args, **kwargs):
        if not hasattr(GetLogging, "_instance"):
            with GetLogging._instance_lock:
                if not hasattr(GetLogging, "_instance"):
                    GetLogging._instance = object.__new__(cls)
        return GetLogging._instance

    # 初始化,会在 __new__ 方法后执行
    def __init__(self):
        self.BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        self.error_log_file_path = os.path.join(self.BASE_DIR, 'logs/error_{time:YYYY-MM-DD}.log')
        self.debug_log_file_path = os.path.join(self.BASE_DIR, 'logs/debug_{time:YYYY-MM-DD}.log')
        self.info_log_file_path = os.path.join(self.BASE_DIR, 'logs/info_{time:YYYY-MM-DD}.log')
        self.all_log_file_path = os.path.join(self.BASE_DIR, 'logs/all_{time:YYYY-MM-DD}.log')
        # 错误日志
        logger.add(
            self.error_log_file_path,
            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'
        )
        # DEBUG日志
        logger.add(
            self.debug_log_file_path,
            format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
            filter=lambda x: True if x["level"].name == "DEBUG" else False,
            rotation="00:00", retention=7, level='DEBUG', encoding='utf-8',
        )
        # INFO日志
        logger.add(
            self.info_log_file_path,
            format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
            filter=lambda x: True if x["level"].name == "INFO" else False,
            rotation="00:00", retention=7, level='INFO', encoding='utf-8',
        )
        # all日志
        logger.add(
            self.all_log_file_path,
            format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",
            rotation="00:00", retention=7, encoding='utf-8'
        )
        self.logger = logger

    def get_log(self):
        return self.logger

# 公开服务对象
log = GetLogging().get_log()

三、使用logger support

示例代码

from common.logger import log

def test_log(press_key):
    log.debug('按下的键盘 code:{0} '.format(press_key))

日志图片.png

个人公众号

0

评论区