python日志库loguru使用教程/封装loguru工具类/自定义日志格式化控制台输出和日志写入

觉得有帮助的小伙伴可以点个赞!分享给更多人!

loguru的git网址,点我去

先看二次封装loguru后的结果如何.

控制台输出,增加进程,线程记录

在这里插入图片描述

日志写入到文件的格式,日志写入格式可以与控制台单独分开设置

在这里插入图片描述

而默认的输出模式是这样的

在这里插入图片描述
我更改了其输出的格式使我们可以利用编辑器(pycharm)快速定位到问题所在
说明:loguru的格式化输出,控制台和日志写入是不同的,分开设置的.
在这里插入图片描述
在这里插入图片描述

以pycharm为例,**我们鼠标选中黄色区域,Ctrl+Shift+N 即可在ALL中找到该方法(精确到行号)**快速定位到日志显示的代码所在.这里笔者只是做了简单的演示,更多的需求可以自己更改实现.

如何封装loguru为工具类/修改控制台日志输出和日期写入的格式/关闭日志写入

为什么有关闭日志写入的需求呢?

因为某些场景下降低多线程/多进程下磁盘性能开销;

前置条件:

pip install loguru
import sys

from loguru import logger

my_log_file_path = "test_log"


class MyLogger:
    def __init__(self, log_file_path=my_log_file_path):
        self.logger = logger
        # 清空所有设置
        self.logger.remove()
        # 添加控制台输出的格式,sys.stdout为输出到屏幕;关于这些配置还需要自定义请移步官网查看相关参数说明
        self.logger.add(sys.stdout,
                        format="<green>{time:YYYYMMDD HH:mm:ss}</green> | "  # 颜色>时间
                               "{process.name} | "  # 进程名
                               "{thread.name} | "  # 进程名
                               "<cyan>{module}</cyan>.<cyan>{function}</cyan>"  # 模块名.方法名
                               ":<cyan>{line}</cyan> | "  # 行号
                               "<level>{level}</level>: "  # 等级
                               "<level>{message}</level>",  # 日志内容
                        )
        # 输出到文件的格式,注释下面的add',则关闭日志写入
        self.logger.add(log_file_path, level='DEBUG',
                        format='{time:YYYYMMDD HH:mm:ss} - '  # 时间
                               "{process.name} | "  # 进程名
                               "{thread.name} | "  # 进程名
                               '{module}.{function}:{line} - {level} -{message}',  # 模块名.方法名:行号
                        rotation="10 MB")

    def get_logger(self):
        return self.logger


my_logger = MyLogger().get_logger()


def ss():
    my_logger.info(2222222)
    my_logger.debug(2222222)
    my_logger.warning(2222222)
    my_logger.error(2222222)
    my_logger.exception(2222222)


if __name__ == '__main__':
    ss()

分享自己从作者的源码中查到的一些参数说明.用于调整日志的输出格式(颜色等)

        +------------+---------------------------------+----------------------------+
        | Key        | Description                     | Attributes                 |
        +============+=================================+============================+
        | elapsed    | The time elapsed since the      | See |timedelta|            |
        |            | start of the program            |                            |
        +------------+---------------------------------+----------------------------+
        | exception  | The formatted exception if any, | ``type``, ``value``,       |
        |            | ``None`` otherwise              | ``traceback``              |
        +------------+---------------------------------+----------------------------+
        | extra      | The dict of attributes          | None                       |
        |            | bound by the user (see |bind|)  |                            |
        +------------+---------------------------------+----------------------------+
        | file       | The file where the logging call | ``name`` (default),        |
        |            | was made                        | ``path``                   |
        +------------+---------------------------------+----------------------------+
        | function   | The function from which the     | None                       |
        |            | logging call was made           |                            |
        +------------+---------------------------------+----------------------------+
        | level      | The severity used to log the    | ``name`` (default),        |
        |            | message                         | ``no``, ``icon``           |
        +------------+---------------------------------+----------------------------+
        | line       | The line number in the source   | None                       |
        |            | code                            |                            |
        +------------+---------------------------------+----------------------------+
        | message    | The logged message (not yet     | None                       |
        |            | formatted)                      |                            |
        +------------+---------------------------------+----------------------------+
        | module     | The module where the logging    | None                       |
        |            | call was made                   |                            |
        +------------+---------------------------------+----------------------------+
        | name       | The ``__name__`` where the      | None                       |
        |            | logging call was made           |                            |
        +------------+---------------------------------+----------------------------+
        | process    | The process in which the        | ``name``, ``id`` (default) |
        |            | logging call was made           |                            |
        +------------+---------------------------------+----------------------------+
        | thread     | The thread in which the         | ``name``, ``id`` (default) |
        |            | logging call was made           |                            |
        +------------+---------------------------------+----------------------------+
        | time       | The aware local time when the   | See |datetime|             |
        |            | logging call was made           |                            |
        +------------+---------------------------------+----------------------------+


		+------------------------------------+--------------------------------------+
        | Color (abbr)                       | Styles (abbr)                        |
        +====================================+======================================+
        | Black (k)                          | Bold (b)                             |
        +------------------------------------+--------------------------------------+
        | Blue (e)                           | Dim (d)                              |
        +------------------------------------+--------------------------------------+
        | Cyan (c)                           | Normal (n)                           |
        +------------------------------------+--------------------------------------+
        | Green (g)                          | Italic (i)                           |
        +------------------------------------+--------------------------------------+
        | Magenta (m)                        | Underline (u)                        |
        +------------------------------------+--------------------------------------+
        | Red (r)                            | Strike (s)                           |
        +------------------------------------+--------------------------------------+
        | White (w)                          | Reverse (v)                          |
        +------------------------------------+--------------------------------------+
        | Yellow (y)                         | Blink (l)                            |
        +------------------------------------+--------------------------------------+
        |                                    | Hide (h)                             |
        +------------------------------------+--------------------------------------+
二次封装 loguru 的方式可以更方便地使用 loguru 模块,同时也可以根据自己的需求自定义日志的格式、级别等信息。 下面是一个示例,将 loguru 封装成一个名为 `MyLogger` 的类,用于输出日志信息: ```python from loguru import logger import sys class MyLogger: def __init__(self, log_path): # 配置日志文件处理器 logger.add(log_path, rotation="10 MB", retention="5 days", level="INFO", encoding="utf-8") # 配置控制台处理器 logger.add(sys.stdout, colorize=True, format="<level>{level} {message}</level>") def info(self, message): logger.info(message) def debug(self, message): logger.debug(message) def warning(self, message): logger.warning(message) def error(self, message): logger.error(message) def exception(self, message): logger.exception(message) ``` 以上代码定义了一个名为 `MyLogger` 的类,它封装loguru 模块,用于输出日志信息。在 `__init__()` 方法中,配置了两个处理器,一个用于输出日志文件,一个用于实时输出控制台。其中,`log_path` 参数指定了日志文件的路径,`rotation` 和 `retention` 参数用于配置日志文件的大小和保留时间,`level` 参数指定了日志级别,`encoding` 参数指定了日志文件的编码方式。`sys.stdout` 表示输出到标准输出流,`colorize=True` 表示控制台输出日志信息带有颜色,`format` 参数用于自定义日志信息的格式。 在类中定义了几个方法,分别用于输出不同级别的日志信息。这些方法内部直接调用 loguru 的对应方法即可。 使用时,可以先创建一个 `MyLogger` 对象,然后调用其方法输出日志信息: ```python logger = MyLogger("app.log") logger.info("This is an info message") logger.debug("This is a debug message") logger.warning("This is a warning message") logger.error("This is an error message") ``` 这样,日志信息就会实时输出控制台上,并且同时写入日志文件中。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Franciz小测测

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值