1. 程式人生 > >自學Python--日誌模組logging

自學Python--日誌模組logging

預設:

import logging

# 預設輸出warning、error、critical資訊
logging.debug('debug') # 除錯資訊
logging.info('info') # 正常資訊
logging.warning('warning') # 警告資訊  WARNING:root:warning
logging.error('error') # 錯誤資訊  ERROR:root:error
logging.critical('critical') # 嚴重錯誤  CRITICAL:root:critical

簡單配置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使用者輸出的訊息

import logging


logging.basicConfig(level=logging.DEBUG,  
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  
                    datefmt='%a, %d %b %Y %H:%M:%S',  
                    filename='./test.log',  
                    filemode='w')  
  
logging.debug('debug message')  
logging.info('info message')  
logging.warning('warning message')  
logging.error('error message')  
logging.critical('critical message')

'''
當前路徑下test.log內容:
Sun, 23 Sep 2018 21:08:19 test12.py[line:10] DEBUG debug message
Sun, 23 Sep 2018 21:08:19 test12.py[line:11] INFO info message
Sun, 23 Sep 2018 21:08:19 test12.py[line:12] WARNING warning message
Sun, 23 Sep 2018 21:08:19 test12.py[line:13] ERROR error message
Sun, 23 Sep 2018 21:08:19 test12.py[line:14] CRITICAL critical message

'''

配置log物件:

import logging


logger = logging.getLogger()
# 建立一個handler,用於寫入日誌檔案
fh = logging.FileHandler('test.log',encoding='utf-8') 

# 再建立一個handler,用於輸出到控制檯 
ch = logging.StreamHandler() 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh.setLevel(logging.DEBUG)

fh.setFormatter(formatter) 
ch.setFormatter(formatter) 
logger.addHandler(fh) #logger物件可以新增多個fh和ch物件 
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-09-23 21:12:52,875 - root - WARNING - logger warning message
2018-09-23 21:12:52,875 - root - ERROR - logger error message
2018-09-23 21:12:52,876 - root - CRITICAL - logger critical message

test.log內容:
2018-09-23 21:12:52,875 - root - WARNING - logger warning message
2018-09-23 21:12:52,875 - root - ERROR - logger error message
2018-09-23 21:12:52,876 - root - CRITICAL - logger critical message
'''

優秀的監控系統:zabbix高靈活性高定製性