Python logging日誌模組
阿新 • • 發佈:2018-12-19
1.日誌的級別
日誌一共分成5個等級, 從低到高分別是:
1. DEBUG
2. INFO
3. WARNING
4. ERROR
5. CRITICAL
說明:
- DEBUG: 詳細的資訊,通常只出現在診斷問題上
- INFO: 確認一切按預期執行
- WARNING: 一個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。 磁碟空間低”)。 這個軟體還能按預期工作。
- ERROR: 更嚴重的問題,軟體沒能執行一些功能
- CRITICAL: 一個嚴重的錯誤,這表明程式本身可能無法繼續執行
這5個等級, 也分別對應5種打日誌的方法: debug 、 info 、 warning 、 error 、 critical。 預設的是 WARNING, 當在WARNING或之上時才被跟蹤。
2.日誌的輸出
2.1將日誌輸出到控制檯
import logging
logging.basicConfig(level=logging.WARNING,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# 開始使用log功能
logging.info('這是 loggging info message')
logging.debug('這是 loggging debug message')
logging.warning('這是 loggging a warning message' )
logging.error('這是 an loggging error message')
logging.critical('這是 loggging critical message')
輸出結果:
2018-11-03 08:42:59,353 - 004-日誌.py[line:6] - WARNING: 這是 loggging a warning message
2018-11-03 08:42:59,353 - 004-日誌.py[line:7] - ERROR: 這是 an loggging error message
2018-11-03 08:42:59,353 - 004-日誌.py[line:8] - CRITICAL: 這是 loggging critical message
2.2將日誌輸出到檔案
import logging
logging.basicConfig(level=logging.WARNING,
filename='./log.txt', # 檔案路徑及檔名
filemode='w',
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# use logging
logging.info('這是 loggging info message')
logging.debug('這是 loggging debug message')
logging.warning('這是 loggging a warning message')
logging.error('這是 an loggging error message')
logging.critical('這是 loggging critical message')
輸出結果:
在檔名下生成log.txt,內容與上面相同
2.3將日誌輸出到控制檯和檔案(重點)
需要用到Logger 的物件 ,具體程式碼如下:
import logging
# 第一步, 建立一個logger
logger = logging.getLogger()
logger.setLevel(logging.INFO) # Log等級總開關
# 第二步, 建立一個handler, 用於寫入日誌檔案
logfile = './log.txt'
fh = logging.FileHandler(logfile, mode='a') # open的開啟模式這裡可以進行參考
fh.setLevel(logging.DEBUG) # 輸出到file的log等級的開關
# 第三步, 再建立一個handler, 用於輸出到控制檯
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING) # 輸出到console的log等級的開關
# 第四步, 定義handler的輸出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter) # 檔案
ch.setFormatter(formatter) # 控制檯
# 第五步, 將logger新增到handler裡面
logger.addHandler(fh)
logger.addHandler(ch)
# 日誌
logger.debug('這是 logger debug message')
logger.info('這是 logger info message')
logger.warning('這是 logger warning message')
logger.error('這是 logger error message')
logger.critical('這是 logger critical message')
輸出結果
""""控制檯""""
2018-11-03 14:25:53,887 - 004-日誌.py[line:53] - WARNING: 這是 logger warning message
2018-11-03 14:25:53,887 - 004-日誌.py[line:54] - ERROR: 這是 logger error message
2018-11-03 14:25:53,887 - 004-日誌.py[line:55] - CRITICAL: 這是 logger critical message
""" 檔案 """
2018-11-03 14:25:53,887 - 004-日誌.py[line:52] - INFO: 這是 logger info message
2018-11-03 14:25:53,887 - 004-日誌.py[line:53] - WARNING: 這是 logger warning message
2018-11-03 14:25:53,887 - 004-日誌.py[line:54] - ERROR: 這是 logger error message
2018-11-03 14:25:53,887 - 004-日誌.py[line:55] - CRITICAL: 這是 logger critical message
3. 日誌格式說明
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: 列印日誌資訊
在工作中給的常用格式如下: (重點)
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
這個格式可以輸出日誌的列印時間, 是哪個模組輸出的, 輸出的日誌級別是什麼, 以及輸入的日誌 內容。