除了傳遞給日志記錄函數(shù)的參數(shù)(如msg)外,有時(shí)候我們還想在日志輸出中包含一些額外的上下文信息。比如,在一個(gè)網(wǎng)絡(luò)應(yīng)用中,可能希望在日志中記錄客戶端的特定信息,如:遠(yuǎn)程客戶端的IP地址和用戶名。這里我們來介紹以下幾種實(shí)現(xiàn)方式:
通過向日志記錄函數(shù)傳遞一個(gè)extra參數(shù)引入上下文信息
使用LoggerAdapters引入上下文信息
使用Filters引入上下文信息
一、通過向日志記錄函數(shù)傳遞一個(gè)extra參數(shù)引入上下文信息
前面我們提到過,可以通過向日志記錄函數(shù)傳遞一個(gè)extra參數(shù)來實(shí)現(xiàn)向日志輸出中添加額外的上下文信息,如:
import loggingimport sys fmt = logging.Formatter("%(asctime)s - %(name)s - %(ip)s - %(username)s - %(message)s") h_console = logging.StreamHandler(sys.stdout) h_console.setFormatter(fmt) logger = logging.getLogger("myPro") logger.setLevel(logging.DEBUG) logger.addHandler(h_console) extra_dict = {"ip": "113.208.78.29", "username": "Petter"} logger.debug("User Login!", extra=extra_dict) extra_dict = {"ip": "223.190.65.139", "username": "Jerry"} logger.info("User Access!", extra=extra_dict)
輸出:
2017-05-14 15:47:25,562 - myPro - 113.208.78.29 - Petter - User Login! 2017-05-14 15:47:25,562 - myPro