對一名開發者來說最糟糕的情況,莫過于要弄清楚一個不熟悉的應用為何不工作。有時候,你甚至不知道系統運行,是否跟原始設計一致。
在線運行的應用就是黑盒子,需要被跟蹤監控。最簡單也最重要的方式就是記錄日志。記錄日志允許我們在開發軟件的同時,讓程序在系統運行時發出信息,這些信息對于我們和系統管理員來說都是有用的。
就像為將來的程序員寫代碼文檔一樣,我們應該讓新軟件產生足夠的日志供系統的開發者和管理員使用。日志是關于應用運行狀態的系統文件的關鍵部分。給軟件加日志產生句時,要向給未來維護系統的開發者和管理員寫文檔一樣。
一些純粹主義者認為一個受過訓練的開發者使用日志和測試的時候幾乎不需要交互調試器。如果我們不能用詳細的日志解釋開發過程中的應用,那么當代碼在線上運行的時候,解釋它們會變得更困難。
這篇文章介紹了 Python 的 logging 模塊,包括它的設計以及針對更多復雜案例的適用方法。這篇文章不是寫給開發者的文檔,它更像是一個指導手冊,來說明 Python 的 logging 模板是如何搭建的,并且激發感興趣的人深入研究。
為什么使用 logging 模塊?
也許會有開發者會問,為什么不是簡單的 print 語句呢? Logging 模塊有很多優勢,包括:
1.多線程支持
2.通過不同級別的日志分類
3.靈活性和可配置性
4.將如何記錄日志與記錄什么內容分離
最后一點,將我們記錄內容從記錄方式中真正分離,保證了軟件不同部分的合作。舉個例子,它允許一個框架或庫的開發者增加日志并且讓系統管理員或負責運行配置的人員決定稍后應該記錄什么。
Logging 模塊中有什么
Logging 模塊完美地將它的每個部分的職責分離(遵循 Apache Log4j API 的方法)。讓我們看看一個日志線是如何通過這個模塊的代碼,并且研究下它的不同部分。
記錄器(Logger)
記錄器是開發者經常交互的對象。那些主要的 API 說明了我們想要記錄的內容。
舉個記錄器的例子,我們可以分類請求發出一條信息,而不用擔心它們是如何從哪里被發出的。
比如,當我們寫下 logger.info(“Stock was sold at %s”, price) 我們在頭腦中就有如下模塊:

我們需要一條線。假設有些代碼在記錄器中運行,讓這條線出現在控制臺或文件中。但是在內部實際發生了什么呢?
日志記錄
日志記錄是 logging 模塊用來滿足所有需求信息的包。它們包含了需要記錄日志的地方、變化的字符串、參數、請求的信息隊列等信息。
它們都是被記錄的對象。每次我們調用記錄器時,都會生成這些對象。但這些對象是如何序列化到流中的呢?通過處理器!
新聞熱點
疑難解答