Bootstrap

Python日志模块

一、loguru的使用

Loguru 一个能彻底解放你的日志记录器。
它即插即用,具备多种方式滚动日志、自动压缩日志文件、定时删除等功能。
除此之外,多线程安全、高亮日志、日志告警等功能也不在话下。
下面就给大家介绍一下这个强大工具的基本使用方法。
Loguru 安装方式很简单,打开终端输入:pip install loguru

import os
import sys
from loguru import logger
import config.BaseConfig as BaseConfig


class LogUtils:
    def __new__(cls, *args, **kwargs):
        # 解决重复打印
        logger.remove()
        logger.add(sys.stderr, level="INFO")

        logFilepath = BaseConfig.baseFilepath + "/logs"

        # 判断目录是否存在,不存在则创建新的目录
        if not os.path.isdir(logFilepath):
            os.makedirs(logFilepath)

        logger.add(
            logFilepath + "/{time:YYYY-MM-DD}.log",  # 指定文件
            format="{time:YYYY-MM-DD HH:mm:ss:SSS} | {level} | Process:{process.name}:{process.id} "
                   "| Thread:{thread.name}:{thread.id} | {file.path}:{line} | {message}",
            encoding="utf-8",
            rotation="00:00",  # 按天分割
            # serialize=True,  # 将记录的消息转化成JSON字符串
            backtrace=True,  # 回溯
            diagnose=True,  # 诊断
            enqueue=True,  # 异步写入
        )

        return logger

二、logging的使用

logging是Python自带的日志模块,主要有以下几个部分:

  1. 记录器暴露了应用程序代码直接使用的接口。

  2. 处理器将日志记录(由记录器创建)发送到适当的目标。

  3. 过滤器提供了更细粒度的功能,用于确定要输出的日志记录。

  4. 格式器指定最终输出中日志记录的样式。

日志级别

级别

数值

CRITICAL

50

ERROR

40

WARNING

30

INFO

20

DEBUG

10

NOTSET

0

记录器

setLevel(level)

给记录器设置阈值为 level 。日志等级小于 level 会被忽略。严重性为 level 或更高的日志消息将由该记录器的任何一个或多个处理器发出,除非将处理器的级别设置为比 level 更高的级别。

创建记录器时,级别默认设置为 NOTSET。

addHandler(hdlr)  将指定的处理器 hdlr 添加到此记录器。

addFilter(filter) 将指定的过滤器 filter 添加到此记录器。

debug(msg, *args, **kwargs) 在此记录器上记录 DEBUG 级别的消息。 

info(msg, *args, **kwargs) 在此记录器上记录 INFO 级别的消息。

warning(msg, *args, **kwargs) 在此记录器上记录 WARNING 级别的消息。

error(msg, *args, **kwargs) 在此记录器上记录 ERROR 级别的消息。

critical(msg, *args, **kwargs) 在此记录器上记录 CRITICAL 级别的消息。

log(level, msg, *args, **kwargs) 在此记录器上记录 level 整数代表的级别的消息。

处理器

StreamHandler

它可将日志记录输出发送到数据流例如 sys.stdoutsys.stderr 或任何文件类对象(或者更精确地说,任何支持 write() 和 flush() 方法的对象)。

FileHandler

它可将日志记录输出到磁盘文件中。

格式器

Formatter(fmt=Nonedatefmt=Nonestyle='%'validate=True*defaults=None)

import logging

logging.basicConfig(

        filename='app.log', #配置文件路径,输出日志保存到文件

        level=logging.DEBUG, #设置日志输出等级

        format='%(asctime)s:%(levelname)s:%(message)s') #自定义日志格式

        logger = logging.getLogger('peewee')

        logger.addHandler(logging.StreamHandler())

日志加颜色 pip install termcolor

from termcolor import colored
import logging

logging.basicConfig(format="[%(asctime)s] >>> %(levelname)s %(name)s: %(message)s", level=logging.INFO)

self.loger = logging.getLogger(f'DarkNet_ChineseTradingNetwork')

self.info = lambda txt: self.loger.info(colored(txt, 'blue'))

self.report = lambda txt: self.loger.info(colored(txt, 'green'))

self.warn = lambda txt: self.loger.info(colored(txt, 'yellow'))

self.error = lambda txt: self.loger.info(colored(txt, 'red'))

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;