GitHub:你的日誌記錄方式何須是logging!!!

hello,小夥伴們,你們好,今天給你們介紹的開源項目是:loguru,這個開源項目是一個Python簡易日誌庫,這個開源項目的宗旨是經過添加一系列有用的功能來解決標準記錄器的注意事項,從而減小 Python日誌記錄的痛苦。git

咱們使用logging的配置方法基本上是這樣的:github

import logging

logging.basicConfig(
    filename='test.log',
    level=logging.DEBUG,
    format='[line:%(lineno)d] - %(funcName)s: %(asctime)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
)
複製代碼

使用官方自帶的logging模塊,每次建立項目都要本身去配置一下才能夠,常常碼代碼使用起來有點嗎發,可是使用這個loguru模塊,只須要兩行代碼便可完成以上配置,簡單易用。bash

安裝


pip install loguru
複製代碼

使用方法


最簡單的使用方法,只須要倒入模塊,而後debug輸出,看控制檯效果便可。app

from loguru import logger

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

打印在控制檯中是彩色的! 性能

若是你的終端兼容,loguru會自動爲日誌添加顏色。你能夠經過使用接收器格式的標記標籤來定義本身喜歡的樣式。學習

logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")
複製代碼

輸出到文件中

只須要添加一行代碼便可測試

from loguru import logger

# 添加到名爲demo.log文件中
logger.add("demo.log")
logger.debug("That's it, beautiful and simple logging!")
複製代碼

輸出到文件中 ui

以時間爲文件名分割日誌,能夠這樣作:spa

from loguru import logger

# 以時間分割日誌
logger.add('file_{time}.log')

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

效果展現(看文件名稱) debug

文件控制的高級用法


logger.add("rotation.log", rotation="500 MB")
複製代碼

以上配置能夠實現每 500MB 存儲一個文件,每一個 log 文件過大就會新建立一個 log 文件。咱們在配置 log 名字時加上了一個 time 佔位符,這樣在生成時能夠自動將時間替換進去,生成一個文件名包含時間的 log 文件。

咱們也可使用rotation參數實現定時建立 log 文件,例如:

logger.add('runtime_{time}.log', rotation='12:00')
複製代碼

這樣就是實現天天 12點新建立一個 log 文件輸出了。

另外咱們也能夠配置 log 文件的循環時間,好比每隔兩週建立一個 log 文件,寫法以下:

logger.add('runtime_{time}.log', rotation='2 week')
複製代碼

這樣咱們就能夠實現兩週建立一個 log 文件了。

不知道你們有沒有遇到過這樣的狀況,不少狀況下,一些很是久遠的 log 對咱們來講並無什麼用處了,它白白佔據了一些存儲空間,不清除掉就會很是浪費。retention 這個參數能夠配置日誌的最長保留時間。

好比咱們想要設置日誌文件最長保留 7 天,能夠這麼來配置:

logger.add('runtime.log', retention='7 days')
複製代碼

這樣 log 文件裏面就會保留最新 7 天的 log,老師不再用擔憂 log 沉積的問題。

loguru 還能夠配置文件的壓縮格式,好比使用 zip 文件格式保存,以下:

logger.add('runtime.log', compression='zip')
複製代碼

這樣能夠更加節省存儲空間。

字符串輸出

logger.info('If you are using Python {}, prefer {feature} of course!', 3.6, feature='f-strings')
複製代碼

這樣在添加參數就很是方便了。

Traceback 記錄

在不少狀況下,若是遇到運行錯誤,而咱們在打印輸出 log 的時候萬一不當心沒有配置好 Traceback 的輸出,頗有可能咱們就無法追蹤錯誤所在了。

但用了 loguru 以後,咱們用它提供的裝飾器就能夠直接進行 Traceback 的記錄,相似這樣的配置便可:

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

咱們作個測試,咱們在調用時三個參數都傳入 0,直接引起除以 0 的錯誤,看看會出現什麼狀況:

my_function(0, 0, 0)
複製代碼

運行完畢以後,能夠發現 log 裏面就出現了 Traceback 信息,並且給咱們輸出了當時的變量值,真的是不能再讚了!結果以下:

> File "run.py", line 15, in <module>
    my_function(0, 0, 0)
    └ <function my_function at 0x1171dd510>

  File "/private/var/py/logurutest/demo5.py", line 13, in my_function
    return 1 / (x + y + z)
                │   │   └ 0
                │   └ 0
                └ 0

ZeroDivisionError: division by zero
複製代碼

根據須要進行結構化日誌記錄


但願對日誌進行序列化以便於解析或傳遞日誌?使用該serialize參數,每條日誌消息在發送到已配置的接收器以前將轉換爲JSON字符串。

logger.add('file_{time}.log', serialize=True)
# {"text": "2020-07-15 21:47:33.793 | DEBUG | __main__:<module>:14 - That's it, beautiful and simple logging!\n", "record": {"elapsed": {"repr": "0:00:00.017317", "seconds": 0.017317}, "exception": null, "extra": {}, "file": {"name": "loguru_demo.py", "path": "/Users/notes/modules/loguru_demo.py"}, "function": "<module>", "level": {"icon": "\ud83d\udc1e", "name": "DEBUG", "no": 10}, "line": 14, "message": "That's it, beautiful and simple logging!", "module": "loguru_demo", "name": "__main__", "process": {"id": 7280, "name": "MainProcess"}, "thread": {"id": 4458839488, "name": "MainThread"}, "time": {"repr": "2020-07-15 21:47:33.793271+08:00", "timestamp": 1594820853.793271}}}
複製代碼

郵件通知


Loguru能夠輕鬆地與功能強大的notifiers庫結合使用(必須單獨安裝),以在程序意外失敗時接收電子郵件或發送其餘多種通知。

import notifiers

params = {
    "username": "you@gmail.com",
    "password": "abc123",
    "to": "dest@gmail.com"
}

# Send a single notification
notifier = notifiers.get_notifier("gmail")
notifier.notify(message="The application is running!", **params)

# Be alerted on each error message
from notifiers.logging import NotificationHandler

handler = NotificationHandler("gmail", defaults=params)
logger.add(handler, level="ERROR")
複製代碼

或者配合ES使用

比內置日誌記錄快10倍

儘管在大多數狀況下,日誌記錄對性能的影響能夠忽略不計,但零成本的日誌記錄器將容許在任何地方使用它而無需過多擔憂。在即將發佈的版本中,Loguru的關鍵功能將以C語言實現,以實現最大速度。

以上就是loguru的基本用法了,感興趣的小夥伴能夠研究一下這個的用法,特別簡單易用,趕快去配置到你的項目中吧!

開源地址:github.com/Delgan/logu…

今天的推薦不知道你們喜歡嗎?若是大家喜歡話,請在文章底部留言或點贊,以表示對個人支持,大家的留言,點贊,轉發關注是我持續更新的動力哦!

關注公衆號回覆:"1024",免費領取一大波學習資源,先到先得哦!

相關文章
相關標籤/搜索