1. 程式人生 > >Python不歸路_logging模塊

Python不歸路_logging模塊

標準 參數 div dha -1 readn imp get cpu負載

Logging模塊學習

1、Logging的五個等級

debug:診斷性的信息

info:確認一切按預期運行

warning:警告性信息,如CPU負載過高,硬盤空間少

error:更嚴重的事情,但系統還能運行

critical:系統無法繼續運行

這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。默認的是WARNING,當在WARNING或之上時才被跟蹤。

2、將日誌輸出到屏幕

  2.1簡單輸出

1 import logging
2 logging.warning(this is a warning message)
3
logging.error(this is a error message) 4 5 #輸出 6 WARNING:root:this is a warning message 7 ERROR:root:this is a error message

  只有WARNING或之上的才會輸出至屏幕。

  2.2logging.basicConfig()函數輸出 

1 logging.basicConfig(format=%(asctime)s %(message)s)
2 logging.warning(this is a warning message)
3 logging.error(
this is a error message) 4 5 #輸出 6 7 2017-11-09 14:52:05,311 this is a warning message 8 2017-11-09 14:52:05,311 this is a error message  

  logging.basicConfig函數中,可以指定日誌的輸出格式format,這個參數可以輸出很多有用的信息:

  %(levelno)s: 打印日誌級別的數值
  %(levelname)s: 打印日誌級別名稱
  %(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0]
  %(filename)s: 打印當前執行程序名
  %(funcName)s: 打印日誌的當前函數
  %(lineno)d: 打印日誌的當前行號
  %(asctime)s: 打印日誌的時間
  %(thread)d: 打印線程ID
  %(threadName)s: 打印線程名稱
  %(process)d: 打印進程ID
  %(message)s: 打印日誌信息

  常用的格式:

1 logging.basicConfig(format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s)
2 logging.warning(this is a warning message)
3 logging.error(this is a error message)
4 
5 #輸出
6 
7 2017-11-09 15:06:14,915 logging模塊.py[line:8] WARNING this is a warning message
8 2017-11-09 15:06:14,915 logging模塊.py[line:9] ERROR this is a error message

3、將日誌出輸出至文件

 1 logging.basicConfig(level=logging.ERROR,format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s,filename=d:\\111.log,filemode=w)
 2 logging.warning(this is a warning message)
 3 logging.error(this is a error message)
 4 with open(d:\\111.log,r) as f:
 5     for lines in f.readlines():
 6         print(lines)
 7 
 8 #輸出
 9 
10 2017-11-09 16:45:44,998 logging模塊.py[line:9] ERROR this is a error message

上面的代碼比2.2中新添加了日誌等級和文件存儲。’level = logging.INFO‘,‘filename=‘d:\\111.log‘,filemode=‘w‘’。

4、將日誌同時輸出至屏幕和文件

具體步驟

  

 1 logger = logging.getLogger()
 2 logger.setLevel(logging.DEBUG)  #記錄日誌等級的總開關
 3 
 4 logfile = d:\\333.log
 5 fh = logging.FileHandler(logfile,mode=w)  #文件存儲位置
 6 fh.setLevel(logging.INFO)  #記錄日誌等級
 7 
 8 sh = logging.StreamHandler()   #輸出屏幕
 9 sh.setLevel(logging.WARNING)   #記錄日誌等級
10 
11 geshi = logging.Formatter(%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s:%(message)s)   #日誌輸出格式
12 fh.setFormatter(geshi)
13 sh.setFormatter(geshi)
14 
15 logger.addHandler(sh)  #添加Handler
16 logger.addHandler(fh)
17 
18 
19 logger.info(this is a INFO message)
20 logger.warning(this is a WARNING message)
21 logger.debug(this is a DEBUG message)
22 
23 
24 輸出
25 
26 2017-11-10 11:40:00,035 - logging模塊.py[line:34] - WARNING:this is a WARNING message

  handler對象負責發送相關的信息到指定目的地。Python的日誌系統有多種Handler可以使用。有些Handler可以把信息輸出到控制臺,有些Logger可以把信息輸出到文件,還有些 Handler可以把信息發送到網絡上。如果覺得不夠用,還可以編寫自己的Handler。可以通過addHandler()方法添加多個多handler。比如上面代碼中輸出至文件FileHandler()和標準輸出SteamHandler()。

  

 

 

  

Python不歸路_logging模塊