<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Python logging 模組定義了為應用程式和庫實現靈活的事件紀錄檔記錄的函數和類。
程式開發過程中,很多程式都有記錄紀錄檔的需求,並且紀錄檔包含的資訊有正常的程式存取紀錄檔還可能有錯誤、警告等資訊輸出,Python 的 logging 模組提供了標準的紀錄檔介面,可以通過它儲存各種格式的紀錄檔,紀錄檔記錄提供了一組便利功能,用於簡單的紀錄檔記錄用法。
使用 Python Logging 模組的主要好處是所有 Python 模組都可以參與紀錄檔記錄Logging 模組提供了大量具有靈活性的功能。
簡單且方便的幫助我們輸出需要的紀錄檔資訊:
使用 Python 來寫程式或者指令碼的話,常常遇到的問題就是需要對紀錄檔進行刪除。一方面可以幫助我們在程式出問題的時候排除問題,二來可以幫助我們記錄需要關注的資訊。
但是,使用自帶自帶的 logging 模組的話,則需要我們進行不同的初始化等相關工作。對應不熟悉該模組的同學來說,還是有些費勁的,比如需要設定 Handler/Formatter 等。 隨著業務的複雜度提升, 對紀錄檔收集有著更高的要求, 例如: 紀錄檔分類, 檔案儲存, 非同步寫入, 自定義型別等等
loguru 是一個 Python 簡易且強大的第三方紀錄檔記錄庫,該庫旨在通過新增一系列有用的功能來解決標準記錄器的注意事項,從而減少 Python 紀錄檔記錄的痛苦。
pip install loguru
有很多優點,以下列舉了其中比較重要的幾點:
from loguru import logger logger.debug("That's it, beautiful and simple logging!")
無需初始化,匯入函數即可使用, 那麼你肯定要問, 如何解決一下問題?
# add logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
是不是很easy~
# 紀錄檔檔案記錄 logger.add("file_{time}.log") # 紀錄檔檔案轉存 logger.add("file_{time}.log", rotation="500 MB") logger.add("file_{time}.log", rotation="12:00") logger.add("file_{time}.log", rotation="1 week") # 多次時間之後清理 logger.add("file_X.log", retention="10 days") # 使用zip檔案格式儲存 logger.add("file_Y.log", compression="zip")
logger.info( "If you're using Python {}, prefer {feature} of course!", 3.10, feature="f-strings")
@logger.catch def my_function(x, y, z): # An error? It's caught anyway! return 1 / (x + y + z) my_function(0, 0, 0)
Loguru 會自動為不同的紀錄檔級別,新增不同的顏色進行區分, 也支援自定義顏色哦~
logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>") logger.add('logs/z_{time}.log', level='DEBUG', format='{time:YYYY-MM-DD :mm:ss} - {level} - {file} - {line} - {message}', rotation="10 MB")
# 非同步寫入 logger.add("some_file.log", enqueue=True)
你沒有看錯, 只需要enqueue=True
即可非同步執行
用於記錄程式碼中發生的異常的 bug 跟蹤,Loguru 通過允許顯示整個堆疊跟蹤(包括變數值)來幫助您識別問題
logger.add("out.log", backtrace=True, diagnose=True) def func(a, b): return a / b def nested(c): try: func(5, c) except ZeroDivisionError: logger.exception("What?!") nested(0)
# 序列化為json格式 logger.add(custom_sink_function, serialize=True) # bind方法的用處 logger.add("file.log", format="{extra[ip]} {extra[user]} {message}") context_logger = logger.bind(ip="192.168.2.174", user="someone") context_logger.info("Contextualize your logger easily") context_logger.bind(user="someone_else").info("Inline binding of extra attribute") context_logger.info("Use kwargs to add context during formatting: {user}", user="anybody") # 粒度控制 logger.add("special.log", filter=lambda record: "special" in record["extra"]) logger.debug("This message is not logged to the file") logger.bind(special=True).info("This message, though, is logged to the file!") # patch()方法的用處 logger.add(sys.stderr, format="{extra[utc]} {message}") loggerlogger = logger.patch(lambda record: record["extra"].update(utc=datetime.utcnow()))
有時希望在生產環境中記錄詳細資訊而不會影響效能,可以使用 opt() 方法來實現這一點。
logger.opt(lazy=True).debug("If sink level <= DEBUG: {x}", x=lambda: expensive_function(2**64)) # By the way, "opt()" serves many usages logger.opt(exception=True).info("Error stacktrace added to the log message (tuple accepted too)") logger.opt(colors=True).info("Per message <blue>colors</blue>") logger.opt(record=True).info("Display values from the record (eg. {record[thread]})") logger.opt(raw=True).info("Bypass sink formattingn") logger.opt(depth=1).info("Use parent stack context (useful within wrapped functions)") logger.opt(capture=False).info("Keyword arguments not added to {dest} dict", dest="extra")
new_level = logger.level("SNAKY", no=38, color="<yellow>", icon="
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45