第三方库:loguru,自定义日志封装模块

  • 安装方式:
pip install loguru
  • 简单示例:
from logrur import logger
logger.debug('Hello logger')

# 2020-11-09 17:11:25.015 | DEBUG    | __main__:<module>:1 - Hello loguru.
  • logger.add方法配置输出格式
from loguru import logger

logger.add("file.log",  # 日志输出到指定文件
            format="{time} {level} {message}",   # 配置格式 
            filter="",    # 过滤器
            level="INFO"   # 过滤级别
          )  
logger.info("这是一条info日志")

# 2019-03-14T20:01:25.392454+0800 INFO 这是一条info日志
  • format参数时间格式化:
logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {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("somefile.log", enqueue=True)  # 异步写入

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




为了使用方便,自定义二次封装logrur

import os
import datetime
from loguru import logger


class Logings:
    __instance = None
    # 文件名称,按天创建
    DATE = datetime.datetime.now().strftime('%Y-%m-%d')

    # 项目路径下创建log目录保存日志文件
    logpath = os.path.join(os.path.dirname(os.getcwd()), "logs")  # 拼接指定路径
    # 判断目录是否存在,不存在则创建新的目录
    if not os.path.isdir(logpath): os.makedirs(logpath)

    logger.add('%s\%s.log' % (logpath, DATE),   # 指定文件
               format="{time:YYYY-MM-DD HH:mm:ss}  | {level}> {elapsed}  | {message}",
               encoding='utf-8',   
               retention='1 days',  # 设置历史保留时长
               backtrace=True,  # 回溯
               diagnose=True,   # 诊断
               enqueue=True,   # 异步写入
               # rotation="5kb",  # 切割,设置文件大小,rotation="12:00",rotation="1 week"
               # filter="my_module"  # 过滤模块
               # compression="zip"   # 文件压缩
              ) 

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(Logings, cls).__new__(cls, *args, **kwargs)
        return cls.__instance

    def info(self, msg, *args, **kwargs):
        return logger.info(msg, *args, **kwargs)

    def debug(self, msg, *args, **kwargs):
        return logger.debug(msg, *args, **kwargs)

    def warning(self, msg, *args, **kwargs):
        return logger.warning(msg, *args, **kwargs)

    def error(self, msg, *args, **kwargs):
        return logger.error(msg, *args, **kwargs)

    def exception(self, msg, *args, exc_info=True, **kwargs):
        return logger.exception(msg, *args, exc_info=True, **kwargs)


if __name__ == '__main__':
    logs = Logings()

    def func(a, b):
        return a/b

    def my(z, c):
        try:
            func(z,c)
        except ZeroDivisionError:
            logs.exception('...........')
    my(5,0)
posted @ 2020-11-19 11:24  HonyL  阅读(2400)  评论(0编辑  收藏  举报