更优美的python日志管理库Loguru

一、Loguru简介

Loguru的主旨就是让程序员能方便优美的实现日志记录。您还记得配置记录器的繁琐过程吗?因为对此感到厌烦?让我们看看以前python日志记录器的创建过程吧。

import logging

#创建日志级别
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#创建日志文件
handler_warn = logging.FileHandler('warning_log.txt')
handler_warn.setLevel(logging.INFO)

#定义日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler_warn.setFormatter(formatter)

#将日志处理程序记录到记录器
logger.addHandler(handler_warn)

以上还是最简单的配置过程,是否感到很繁琐。确实如此,但是记录是每个应用程序的基础,并简化了调试过程。使用Loguru,您没有理由不从一开始就使用日志记录,这很简单。只需要引入loguru库即可,而且loguru的性能也非常好,因为Loguru的关键功能将以C语言实现,以实现最高速度。

from loguru import logger

另外,该库旨在通过添加一堆有用的功能来减轻Python日志记录的痛苦,这些功能可以解决标准记录器的问题。在您的应用程序中使用日志应该是自动的,Loguru试图使其变得既愉快又强大。

二、Loguru安装

安装方法很简单。

pip install loguru

三、Loguru使用

1、简单使用

from loguru import logger

logger.debug("That's it, beautiful and simple logging!")

结果显示彩色,非常的优美。

2、日志格式

根据自己的需求配置日志格式,也非常简单,只需要简单配置即可完成。如下:

import sys
from loguru import logger

#配置日志格式
logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")

logger.info("That's it, beautiful and simple logging!")
logger.debug("That's debug")
logger.warning("That's warning")

结果,不同的颜色显示:

3、日志文件

如果要将记录的消息保存到文件,则只需使用字符串路径作为接收器。配置如下:

logger.add("file_{time}.log")

如果需要设置日志文件大小、删除较旧的日志文件或希望在关闭时压缩文件,并设置压缩格式,这些都可以进行配置,而且配置起来非常简单。如下:

#rotation参数
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")    # 一周创建一个日志文件

#retention参数
logger.add("file_X.log", retention="10 days")  # 日志文件最长保留 10 天

#compression参数
logger.add("file_Y.log", compression="zip")    # 日志文件压缩格式为ZIP

4、字符串格式化

Loguru倾向于使用更优雅,更强大的{}格式%,日志记录功能实际上等效于str.format()

logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")

结果:

5、Traceback捕获

您是否曾经看到程序意外崩溃而没有在日志文件中看到任何内容?您是否注意到没有记录线程中发生的异常?这可以使用catch()装饰器/上下文管理器解决,该管理器可以确保将任何错误信息正确保存到logger中。配置如下:

import sys
from loguru import logger

@logger.catch
def my_function(x, y, z):
    # An error? It's caught anyway!
    return 1 / (x + y + z)
 
my_function(1,-1,0)

结果:

6、色彩斑斓的日志

如果您的终端兼容,Loguru会自动为日志添加颜色。您可以通过使用接收器格式来自定义自己喜欢的样式。配置方式如下:

logger.add(sys.stderr, colorize=True, format="<green>{time}</green> <level>{message}</level>",level="DEBUG")

结果,DEBUG及以上的信息或被自定义显示样式。

7、异步写入日志

logger默认情况下,添加到的所有接收器都是线程安全的。它们不是多进程安全的,但是您可以enqueue通过消息来确保日志的完整性。如果要异步记录,也可以使用相同的参数。

logger.add("somefile.log", enqueue=True)

8、序列化日志

希望对日志进行序列化以便于解析或传递日志?使用该serialize参数,每条日志消息在发送到已配置的接收器之前将转换为JSON字符串。

logger.add(custom_sink_function, serialize=True)

9、配置日期格式

logger.add(sys.stderr, format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",level="DEBUG")

logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
logger.debug("That's debug")
logger.warning("That's warning")

结果:

10、配置编码格式

logger.add(log_file_path, rotation="500 MB", encoding='utf8')

还有更多的配置方法,详细请参考官方文档。

四、参考

1、官方文档:https://loguru.readthedocs.io/en/stable/overview.html

2、官方github: https://github.com/Delgan/loguru

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342