python的Logging模塊可通過配置實現多場景日志管理。1. 導入logging模塊并調用方法可記錄日志,默認輸出warning及以上級別,通過basicconfig設置level參數可調整輸出范圍;2. 使用format參數自定義日志格式,加入時間、級別、模塊名等內容,并可通過filename參數將日志寫入文件;3. 大型項目中應為不同模塊創建獨立logger,便于管理和調試,也可單獨設置模塊日志級別;4. 需要同時輸出到控制臺和文件時,應手動添加streamhandler和filehandler,并分別設定級別和格式,實現靈活的日志收集與展示。掌握這些配置后,即可高效使用logging模塊滿足各類項目需求。
python自帶的日志模塊logging功能強大,但剛上手時配置起來有點繞。很多人一開始只是簡單用一下print()調試代碼,但一旦項目變大或者部署上線后,光靠print就不夠用了。這時候就需要一個穩定、可配置、結構清晰的日志系統。
日志模塊基本使用:別再只用print了
在Python中,最基礎的日志記錄方式就是導入logging模塊并調用相應的方法:
import logging logging.warning('這是一個警告信息')
這樣會在控制臺輸出一條日志,包含時間、級別、消息等內容。默認情況下,只有WARNING及以上級別的日志會被顯示出來,比如Error和CRITICAL。
立即學習“Python免費學習筆記(深入)”;
你可以通過設置日志級別來控制輸出范圍:
logging.basicConfig(level=logging.DEBUG)
這樣就能看到從DEBUG開始的所有日志。這個設置一般放在程序啟動時執行一次就行。
配置日志格式:讓日志信息更清晰
默認的輸出格式比較簡單,可能不滿足實際需求。我們可以通過basicConfig來自定義日志格式:
logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO )
上面這段配置會顯示時間戳、logger名稱、日志級別和消息內容。如果你希望把日志寫入文件而不是控制臺,也可以加上filename參數:
logging.basicConfig( filename='app.log', filemode='a', format='%(asctime)s - %(levelname)s - %(message)s', level=logging.INFO )
注意filemode默認是’a’,表示追加寫入。如果你想每次運行都覆蓋舊日志,可以改成’w’。
多個模塊使用日志:合理組織logger層級
在一個大型項目中,不同模塊應該使用不同的logger,這樣便于分類管理和定位問題。例如:
# module_a.py import logging logger = logging.getLogger(__name__) logger.info("模塊A開始工作")
# module_b.py import logging logger = logging.getLogger(__name__) logger.info("模塊B開始工作")
如果主程序設置了根logger的級別為INFO,這兩個模塊的日志都會正常輸出。你還可以單獨為某個模塊設置級別:
logging.getLogger('module_a').setLevel(logging.WARNING)
這樣module_a就只會輸出WARNING及以上的日志,而其他模塊不受影響。
日志輸出到多個地方:控制臺+文件一起用
有時候你想讓日志既顯示在控制臺又寫入文件。這時就不能只用basicConfig了,需要手動添加多個Handler:
import logging logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # 控制臺輸出 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) # 文件輸出 file_handler = logging.FileHandler('debug.log') file_handler.setLevel(logging.DEBUG) # 設置格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) # 添加handler logger.addHandler(console_handler) logger.addHandler(file_handler) # 測試日志 logger.debug('這是一條debug信息') # 只寫入文件 logger.info('這是一條info信息') # 控制臺和文件都有
這樣做的好處是不同渠道的日志級別可以分開控制,適合開發環境和生產環境的混合使用場景。
基本上就這些。Python的logging模塊雖然剛開始有點復雜,但只要掌握了基本配置方式,就可以靈活應對各種項目需求了。