Python Logging
原來真的遠比我想象的要復雜很多很多,學習路線堪比git。但是又繞不過去,alternatives又少,所以必須要予以重視,踏踏實實認認真真的來好好學學才行。
學習Logging的目的:
簡單腳本還好,print足夠。
但是稍微復雜點,哪怕是三四個文件加起來兩三百行代碼,調試也開始變復雜起來了。
再加上如果是后臺長期運行的那種腳本,運行信息的調查更是復雜起來。
一開始我還在各種查crontab
的日志查看,或者是python
后臺運行查看,或者是python stdout
的獲取等等,全都找錯了方向。
真正的解決方案在于正確的logging。
記錄好了的話,我不需要去找python的控制臺輸出stdout,也不需要找crontab的日志,只需要查看log文件即可。
下面是python的logging學習記錄。
最簡單的日志輸出(無文件記錄)
import logging logging.error("出現了錯誤")logging.info("打印信息")logging.warning("警告信息")
首先,忘掉logging.info()! 忘掉logging.basicConfig()!
網上各種關于python logging的文章實在是太不體諒新手了,logging這么復雜的東西竟然想表現得很簡單,還用各種簡單的東西做假象。
實際上我們真正要用起來的日志,絕對是不會直接用logging.info()
和logging.basicConfig()
這樣的,這是此模塊的官方推出來迷惑人的——看似讓你一鍵上手,快速看到結果,但是跟實際真的不搭!
所以為了后面解釋起來輕松,必須先警告這點:忘記它們倆!
記住,唯一要用到logging.
什么的,就只有logging.getLogger()
這一次。
了解logging的工作流
不想上流程圖一類的東西,那樣反而更迷糊。
簡單說吧:
logging
模塊是會自動將你自定制的logger對象全局化
的,
也就是說,你在自己的模塊里只要定義了一次某個logger,比如叫log,那么只要是在同一個模塊中運行的其他文件都能讀取到它。
比如說,你在主文件main.py中自定義了一個logger,可能設置了什么輸出文件、輸出格式什么的,然后你在main.py
中會引用一些別的文件或模塊,比如sub.py
,那么在這個sub.py中你什么都不用設置,只要用一句logger = logging.getLogger('之前在main.py定義的日志名')
即可獲得之前的一切自定義設置。
當然,被調用的文件(先稱為子模塊)中,用logging.getLogger('日志名')
時,最好在日志名后加一個.子名稱
這樣的,比如main.sub。這樣輸出的時候就會顯示出來某條日志記錄是來自于這個文件里了。當然,.前面的父級logger必須名字一致,是會被識別出來的!
新聞熱點
疑難解答