写在前面
最近在用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))
评论区