转载*请注明原始出处:http://blog.csdn.net/a464057216/article/details/47680149
后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
python的logging模块功能非常完善,更详细的使用方法可以参考
logging官方文档。下面介绍基本的使用方法,能够让我们定义记录日志的格式,然后向文件中记录日志。
一、定义日志格式
logging.basicConfig([**kwargs])
,参数如下:
- filename:要记录的日志文件名字。
- filemode:记录日志的模式,默认是
'a'
。一般都使用默认追加模式,如果使用'w'
模式,则程序每次执行都会覆盖前一次的日志。 - format:日志记录的格式,有很多属性可以使用。
%(asctime)s:日志记录时间,例如2016-07-08 16:49:45,896。
%(filename)s:打印日志的程序源文件名。
%(funcName)s:打印日志的函数名。
%(levelno)d:日志信息的级别。
%(lineno)d:打印日志的程序源文件行号。
%(module)s:打印日志的模块名。
%(message)s:日志消息体
%(pathname)s:打印日志的程序源文件路径。
%(process)d:打印日志的进程号。
%(processName)s:打印日志的进程名字。
%(thread)d:打印日志的线程号。
%(threadName)s:打印日志的线程名字。
- datefmt:日期格式(如果format里要显示时间的话)
具体的修饰符用法可以man date看一下,常见的比如'%Y-%m-%d %H:%M:%S'
。 - level:日志等级
其中level只是定义日志器的基本级别,如果要记录的信息级别比它高或者相等才记录,否则忽略不记,例如:
logging.basicConfig(level = logging.INFO, filename = 'log.log')
logging.debug('This will not be logged.')
logging.info('This will be logged.')
执行结果:
mars@mars-Ideapad-V460:~/test$ cat log.log
INFO:root:This will be logged.
logging模块各个级别从低到高依次是:
logging.NOTSET: 0
logging.DEBUG: 10
logging.INFO: 20
logging.WARNING: 30
logging.ERROR: 40
logging.CRITICAL: 50
二、记录日志
- logging.debug(msg[, args[, kwargs]]):打印DEBUG级别的日志消息,msg的信息会替换到logging.basicConfig函数的format参数指定的%(message)s里面,args可以为msg提供消息,kwargs中可以使用extra参数拓展logging.basicConfig函数的format参数的属性,例如:
d = {'para': 'This'}
logging.basicConfig(level = logging.INFO, filename = 'log.log',
format = '%(para)s is a(n) %(message)s')
logging.info('test %s', 'case', extra = d)
执行结果:
mars@mars-Ideapad-V460:~/test$ cat log.log
This is a(n) test case
logging.info(msg[, args[, kwargs]])、logging.warning(msg[, args[, kwargs]])、logging.error(msg[, args[, kwargs]])、logging.critical(msg[, args[, kwargs]])分别打印INFO、WARNING、ERROR、CRITICAL级别的日志消息,用法和logging.debug()一样。
还有一个接口是logging.log(level,msg[, args[, kwargs]]),它的第一个参数指定日志消息级别,相当于可以灵活调用debug、info、warning、error、cirtical这些接口。
三、一个例子
停留随机的时间,然后打印当前时间和日志级别消息。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @author: Mars Loo
import logging, time, random
logging.basicConfig(filename = 'log.log',
level = logging.INFO,
format = '%(asctime)s %(levelno)d %(message)s',
timefmt = '%H:%M:%s')
try:
logging.info('task begin==============')
while True:
logging.critical('This is a critical message.')
time.sleep(random.randint(1,4))
logging.warning('This is a warning message.')
except:
logging.info('task end===============')
执行结果:
mars@mars-Ideapad-V460:~/test$ cat log.log
2015-08-15 11:51:34,899 20 task begin==============
2015-08-15 11:51:34,899 50 This is a critical message.
2015-08-15 11:51:35,900 30 This is a warning message.
2015-08-15 11:51:35,901 50 This is a critical message.
2015-08-15 11:51:37,903 30 This is a warning message.
2015-08-15 11:51:37,925 50 This is a critical message.
2015-08-15 11:51:38,926 30 This is a warning message.
2015-08-15 11:51:38,926 50 This is a critical message.
2015-08-15 11:51:40,929 30 This is a warning message.
2015-08-15 11:51:40,929 50 This is a critical message.
2015-08-15 11:51:43,932 30 This is a warning message.
2015-08-15 11:51:43,932 50 This is a critical message.
2015-08-15 11:51:46,933 30 This is a warning message.
2015-08-15 11:51:46,934 50 This is a critical message.
2015-08-15 11:51:47,852 20 task end===============
如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!