import logging
#常用日志模塊
#Logger:即 Logger Main Class,是我們進行日志記錄時創建的對象,我們可以調用它的方法傳入日志模板和信息,來生成一條條日志記錄,稱作 Log Record。
# Log Record:就代指生成的一條條日志記錄。
# Handler:即用來處理日志記錄的類,它可以將 Log Record 輸出到我們指定的日志位置和存儲形式等,如我們可以指定將日志通過 FTP 協議記錄到遠程的服務器上,Handler 就會幫我們完成這些事情。
# Formatter:實際上生成的 Log Record 也是一個個對象,那么我們想要把它們保存成一條條我們想要的日志文本的話,就需要有一個格式化的過程,那么這個過程就由 Formatter 來完成,返回的就是日志字符串,然后傳回給 Handler 來處理。
# Filter:另外保存日志的時候我們可能不需要全部保存,我們可能只需要保存我們想要的部分就可以了,所以保存前還需要進行一下過濾,留下我們想要的日志,如只保存某個級別的日志,或只保存包含某個關鍵字的日志等,那么這個過濾過程就交給 Filter 來完成。
# Parent Handler:Handler 之間可以存在分層關系,以使得不同 Handler 之間共享相同功能的代碼。
#第一部分
# logging.debug('debug message')
# logging.info('info ,message')
# logging.warning('warning message')
# logging.error('error message')
# logging.critical('critical message')
#logging的級別、權限 deubug與info級別不足 不打印
#默認只會打印下三個
#第二部分 創建日志 屏幕 文件二選一
# 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',
# #只要有filename就默認為文件存儲 若沒有直接顯示在屏幕上
# filemode='w')
#修改配置
# logging.debug('debug message')
# logging.info('info ,message')
# logging.warning('warning message')
# logging.error('error message')
# logging.critical('critical message')
#結果:line對應程序的第幾行 levelname指DEBUG、INFO等級別名 asctime對應datefmt filename可指路徑
#Wed,14 Aug 2019 11:50:42 logger.py[line:22] DEBUG debug message
# Wed,14 Aug 2019 11:50:42 logger.py[line:23] INFO info ,message
# Wed,14 Aug 2019 11:50:42 logger.py[line:24] WARNING warning message
# Wed,14 Aug 2019 11:50:42 logger.py[line:25] ERROR error message
# Wed,14 Aug 2019 11:50:42 logger.py[line:26] CRITICAL critical message
#第三部分 同時創建文本與屏幕日志
logger=logging.getLogger()
#創建一個handler,用於寫入日志文件
fh=logging.FileHandler('test,log')
#再創建一個handler,用於輸出到控制台 文件對象 文件輸出流 所以需要一個參數放文件
ch=logging.StreamHandler()
#屏幕對象
formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#formatter 為輸出格式
fh.setFormatter(formatter)
ch.setFormatter(formatter)
#為簡便屏幕與文件公用一個輸出格式,也可以不同
logger.addHandler(fh)
logger.addHandler(ch)
#若想僅文件輸出可引掉這句 僅屏幕輸出同理
logger.setLevel(logging.DEBUG)
#更改權限
logger.debug('debug message')
logger.info('info ,message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')