日志模块-logging模块
生活随笔
收集整理的這篇文章主要介紹了
日志模块-logging模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
日志模塊 -logging(非常重要)
- 記錄用戶行為
- 程序運行過程
- 程序錯誤記錄
程序默認級別在info以上
# 使用#導入logging模塊import logginglogging.debug('低級別的拍錯信息') #低級別的排錯信息logging.info('正常的信息') #正常信息logging.warning('警告信息') #警告信息logging.error('錯誤信息') #錯誤信息logging.critical('高級別的錯誤信息') #高級別錯誤信息#結果WARNING:root:警告信息ERROR:root:錯誤信息CRITICAL:root:高級別的錯誤信息
簡單配置
import logging#配置logging logging.basicConfig(filename='logger.log', level=logging.INFO)logging.debug('低級別的拍錯信息') #低級別的排錯信息 logging.info('正常的信息') #正常信息 logging.warning('警告信息') #警告信息 logging.error('錯誤信息') #錯誤信息 logging.critical('高級別的錯誤信息') #高級別錯誤信息#結果 當前文件路徑下生成了文件logger.log 其內容如下: INFO:root:正常的信息 WARNING:root:警告信息 ERROR:root:錯誤信息 CRITICAL:root:高級別的錯誤信息- 因為通過level=logging.INFO設置了日志的通知級別,所以文件中打印出了INFO的信息
basicConfig()常用配置參數
logging.basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有:filename:用指定的文件名創建FiledHandler,這樣日志會被存儲在指定的文件中。filemode:文件打開方式,在指定了filename時使用這個參數,默認值為“a”還可指定為“w”。format:指定handler使用的日志顯示格式。datefmt:指定日期時間格式。level:設置rootlogger(后邊會講解具體概念)的日志級別stream:用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。format參數中可能用到的格式化串:%(name)s Logger的名字%(levelno)s 數字形式的日志級別%(levelname)s 文本形式的日志級別%(pathname)s 調用日志輸出函數的模塊的完整路徑名,可能沒有%(filename)s 調用日志輸出函數的模塊的文件名%(module)s 調用日志輸出函數的模塊名%(funcName)s 調用日志輸出函數的函數名%(lineno)d 調用日志輸出函數的語句所在的代碼行%(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示%(relativeCreated)d 輸出日志信息時的,自Logger創建以 來的毫秒數%(asctime)s 字符串形式的當前時間。默認格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒%(thread)d 線程ID。可能沒有%(threadName)s 線程名。可能沒有%(process)d 進程ID。可能沒有%(message)s用戶輸出的消息- basicConfig有兩個坑(缺點)
- 對中文的兼容問題,無法解決中文的亂碼問題
- 不能同時往文件和屏幕輸出
利用對象的方式創建logging
- 程序的充分解耦,讓程序變得高可定制化
各功能相當于綁定,功能的添加時通過對象之間的綁定
import logging#創建一個logging對象logger = logging.getLogger()#創建一個logging文件對象fh = logging.FileHandler('text.log', encoding='utf-8', mode='a')#創建一個logging控制臺對象sh = logging.StreamHandler() #輸出至什么地方#輸出格式formatter = '%(asctime)s%(lineno)d'#創建輸出格式的對象fm = logging.Formatter(formatter) #設置一個格式#文件對象和控制臺對象添加輸出格式fh.setFormatter(fm) #以什么格式輸出至什么地方sh.setFormatter(fm)#給logging對象添加logger.addHandler(fh)logger.addHandler(sh)logging.debug('低級別的拍錯信息') #低級別的排錯信息logging.info('正常的信息') #正常信息logging.warning('警告信息') #警告信息logging.error('錯誤信息') #錯誤信息logging.critical('高級別的錯誤信息') #高級別錯誤信息- 非常靈活,自定義的程度很高,可以設定不同的輸出位置和不同的格式
logging庫提供了多個組件:Logger、Handler、Filter、Formatter。Logger對象提供應用程序可直接使用的接口,Handler發送日志到適當的目的地,Filter提供了過濾日志信息的方法,Formatter指定日志顯示格式。另外,可以通過logger.setLevel(logging.Debug)設置級別,當然,也可以通過
fh.setLevel(logging.Debug)單對文件流設置某個級別
總結
配置方式兩種
- basicConfig()直接設置全局
- 不兼容中文模式
- 不能同時多位置輸出
- logging對象創建
- 高定制,高靈活
轉載于:https://www.cnblogs.com/liliudong/p/9660663.html
總結
以上是生活随笔為你收集整理的日志模块-logging模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 六月中旬的心得
- 下一篇: Fast Paxos