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()。