Python loguru日志库之高效输出控制台日志和日志记

1.loguru日志库简介

Loguru是一个PythonPython的日志库,用于在终端和文件中输出易于使用、美观且可配置的日志。在2021年-9月-29日更新的版本中,Loguru添加了许多在前一版本中不存在的特性,并进行了大量的增强和完善,现在它已被广泛应用于Python应用程序的日志记录。

2.下面介绍一下Loguru的使用方式

2.1 安装Loguru

pip install loguru

2.2 基本使用

首先,我们在程序中导入Loguru:

from loguru import logger

接下来,我们可以使用Loguru来记录日志了:

logger.info("This is an info message.")

Loguru会将消息记录到控制台:

2021-09-29 14:51:21.324 | INFO     | __main__::1 - This is an info message.

2.3 输出到控制台

默认情况下,Loguru只会将日志记录到控制台。如果需要将日志以不同的方式输出,可以使用Loguru的配置功能。下面是一个例子:

logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")

上面的代码片段将创建一个可以将日志记录到sys.stderr的配置,并将日志格式化为:

{time} {level} {message}

这将打印出一个时间戳、日志级别和消息正文:

2021-09-29T14: 56: 44.201366+08: 00 INFO This is an info message from the configured logger.

2.4 输出到文件

使用Loguru输出到文件是另一项功能,在实际的应用中,将日志记录到文件会更方便。Loguru提供了灵活的功能来记录到各种事件,可以采用如下方式:

logger.add("important.log")

以上代码片段将定义一个配置,以将所有日志记录到important.log文件。

2.5 自定义日志消息格式

Loguru允许使用格式化字符串控制消息的输出格式。举个例子,我们可以使用以下字符串来划定我们的消息输出格式:

"[{time:YYYY-MM-DD HH:mm:ss.SSS}] [{level}] [{file}] [{line}] {message}"

此格式字符串将允许我们控制消息的timelevelfilelinemessage。可以使用许多不同的格式化选项,例如将{time}替换为{time:YYYY-MM-DD HH:mm:ss}以获得更易于读取的时间戳。

2.6 其他Loguru功能

除了上面的基本功能,Loguru还具有其他很有用的功能,例如:

捕获并记录异常

设置日志级别

添加过滤器和处理程序

旋转日志文件

写入邮件或聊天应用

3.高级用法

3.1 高级日志记录

除了基本日志功能外,Loguru还支持一些高级日志记录功能。例如,创建自定义日志文件名和将多个处理程序添加到同一个记录器对象。我们可以通过以下方式打印一条日志:

logger.add("logs/{time:YYYY-MM-DD}.log")logger.add(sys.stderr, level="ERROR")logger.info("This is an info message.")logger.error("This is an error message.")

上面的代码将记录所有日志信息到文件夹logs{time:YYYY-MM-DD}.log文件中,并将ERROR级别以上的日志记录到标准错误输出中。在上面的例子中,我们使用了两个处理程序,其中一个写入文件,另一个发送到标准错误输出。

3.2 日志文件旋转

日志文件通常会增长很快,这可能会导致磁盘空间不足或性能问题。为了解决这个问题,可以使用日志文件旋转。有多种库可以实现日志文件旋转,例如Python的logging.handlers.RotatingFileHandlerlogging.handlers.TimedRotatingFileHandler等。Loguru自带了旋转日志文件的功能,可以使用以下代码:

from datetime import datetimefrom loguru import loggerlogger.add("file_{time}.log")logger.add("file.log", rotation="1 week")

上面的例子将创建两个处理程序:"file_{time}.log""file.log"。前者将创建多个文件,每个文件名都将包含格式化的时间戳。后者将在每周之后旋转到一个新文件中。上面的例子还展示了如何自定义旋转文件的周期。

3.3 异步记录日志

如果您在高流量应用程序中使用Loguru,可能需要异步记录日志,以确保应用程序的性能不受影响。Loguru利用Python的异步/await功能提供了异步日志记录的支持,下面是一个例子:

from loguru import loggerimport asyncioasync def main():    while True:        logger.info("this is a log message!")        await asyncio.sleep(1)if __name__ == "__main__":    logger.add("logs.log")    loop = asyncio.get_event_loop()    loop.run_until_complete(main())

以上代码将记录所有日志信息到文件logs.log中,并使用Python的asyncio库实现异步日志记录。

4.总结

Loguru是一个高效的日志记录库,广受欢迎。虽然它的基本用法很简单,但它包含了许多高级用法。本文介绍了Loguru的基本用法以及一些高级功能,例如日志文件旋转、自定义日志消息格式和异步记录。

后端开发标签