天天看點

有了它,可以把Python裡Logging子產品扔掉了!

有了它,可以把Python裡Logging子產品扔掉了!

原來我們在 Python 中寫日志,使用的是 Python 自帶的 logging 子產品,要實作既在終端輸出,又能寫檔案,并且日志檔案還能 rotate ,代碼需要十多行:

import logging
from logging.handlers import RotatingFileHandler

os.makedirs('Logs', exists_ok=True)
logger = logging.getLogger('Robot')
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
file_handler = RotatingFileHandler(os.path.join('Logs', 'robot.log'),
maxBytes=5 * 1024 * 1024,
backupCount=10,
encoding='utf-8')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
logger.addHandler(handler)
logger.addHandler(file_handler)
logger.setLevel(logging.DEBUG)

logger.info('終于可以寫日志了...')
           

那有沒有什麼簡單好用,

for human

的寫日志方案呢?

當然有,那就是使用loguru[1]這個子產品。

它有多好用呢?我們用一段代碼來示範:

from loguru import logger
logger.add('logs/z_project.log',
           level='DEBUG',
           format='{time:YYYY-MM-DD HH:mm:ss} - {level} - {file} - {line} - {message}',
           rotation="10 MB")
logger.info('可以寫日志了')
           

不需要提前建立檔案夾。不需要設定奇奇怪怪的

handler

甚至你可以直接把它當做裝飾器使用,當一個函數報錯的時候,自動記錄日志:

from loguru import logger


@logger.catch
def test():
    'a' + 1
           

函數報錯時,自動記錄報錯資訊到日志中。

他記錄的報錯資訊有多準确呢?我們來看這個圖:

有了它,可以把Python裡Logging子產品扔掉了!

每個變量的值都給你标出來了。

使用 loguru 也隻需要定義一次格式。隻需要在入口檔案定義好格式,在同一個項目中的其他檔案中,直接

from loguru import logger
logger.info('可以用了')
           

參考資料

[1] loguru: https://github.com/Delgan/loguru

end

近期十大熱門:
           
  • 用Python一鍵生成炫酷九宮格圖檔,火了朋友圈
  • 菜鳥也瘋狂!8分鐘用Python做一個酷炫的家庭随手記
  • Github獲8300星!用Python開發的一個指令行的網易雲音樂
  • 一道Python面試題,硬是沒憋出來,最後憋出一身汗!
  • 卧槽!Pdf轉Word用Python輕松搞定!

每個程式員都是從菜鳥開始成長起來的,沒有人一開始就是程式員高手。菜鳥愛程式設計,專注于分享趣味的程式設計技巧,不限于Java, Python ,Go, Javascript等語言,讓菜鳥愛上程式設計,進階成為高手。

菜鳥程式設計大學營

長按2秒,輸入:【書單】

           
點這裡,進菜鳥學PythonB站大學營
           

繼續閱讀