您的位置:首页 > 编程语言 > Python开发

4.Python记录日志logging模块的使用

2015-08-15 11:04 1626 查看
python的logging模块功能非常完善,更详细的使用方法可以参考

logging官方文档。下面介绍基本的使用方法,能够让我们定义记录日志的格式,然后向文件中记录日志。

一、定义日志格式

logging.basicConfig([**kwargs]),参数如下:

filename:要记录的日志文件名字。

filemode:记录日志的模式,默认是’a’。一般都使用默认追加模式,如果使用‘w’模式,则程序每次执行都会覆盖前一次的日志。

format:日志记录的格式,有很多属性可以使用。

%(asctime)s:日志记录时间,例如2003-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===============
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: