天天看點

GitHub:你的日志記錄方式何必是logging!!!

GitHub:你的日志記錄方式何必是logging!!!
GitHub:你的日志記錄方式何必是logging!!!

hello,小夥伴們,大家好,今天給大家介紹的開源項目是:

loguru

,這個開源項目是一個

Python

簡易日志庫,這個開源項目的宗旨是通過添加一系列有用的功能來解決标準記錄器的注意事項,進而減少

Python

日志記錄的痛苦。

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

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

子產品,隻需要兩行代碼即可完成以上配置,簡單易用。

安裝

pip install loguru
           

使用方法

最簡單的使用方法,隻需要倒入子產品,然後debug輸出,看控制台效果即可。

from loguru import logger

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

列印在控制台中是彩色的!

GitHub:你的日志記錄方式何必是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!")
           

輸出到檔案中

GitHub:你的日志記錄方式何必是logging!!!

以時間為檔案名分割日志,可以這樣做:

from loguru import logger

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

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

效果展示(看檔案名稱)

GitHub:你的日志記錄方式何必是logging!!!

檔案控制的進階用法

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": "[email protected]",
    "password": "abc123",
    "to": "[email protected]"
}

# 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

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

開源位址:https://github.com/Delgan/loguru

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

關注公衆号回複:"

1024

",免費領取一大波學習資源,先到先得哦!

GitHub:你的日志記錄方式何必是logging!!!