Python logging模块使用

基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import logging # 导入logging模块
logging.basicConfig( # 配置logging模块
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
)
# 用法1:使用默认logger
logging.info('this is info message') # 输出info级消息
# 用法2:自定义logger的名字
logger = logging.getLogger('mylogger')
logger.info('this is info message from mylogger')

# 输出
# 2018-07-01 18:49:36,170 INFO this is a info
# 2018-07-01 18:49:36,170 INFO this is a info from mylogger

通过getLogger指定logger的名称,名称可以在format中用%(name)s格式化输出。

指定logger名称有一个好处是,在同一个程序的不同文件中引用相同名称的logger对应的是同一个实例,这有利于logging的跨文件调用。

basicConfig的参数

level

指定日志输出的等级

logging模块中日志等级分为如下几种

1
2
3
4
5
6
7
8
9
等级       数值
CRITICAL 50
FATAL 50
ERROR 40
WARNING 30
WARN 30
INFO 20
DEBUG 10
NOTSET 0

logging模块输出日志时只能输出比level参数等级相同或更高的日志,也就是说,如果我的level=logging.INFO,那我调用logging.debug()是不会输出的,因为DEBUGINFO等级低。

format

指定每一条日志的内容,可以用下面的模块随意组合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
`%(asctime)s`    表示当前时间,格式为`2018-07-01 19:08:41,050`,逗号后面是毫秒
`%(levelname)s` 表示日志级别名称
`%(message)s` 表示日志内容
`%(name)s` 表示日志名称(未指定则为roots)
`%(lineno)d` 表示输出日志的代码所在行数
`%(levelno)s` 表示数字形式的日志级别
`%(pathname)s` 表示程序执行路径,相当于`sys.argv[0]`
`%(filename)s` 表示所在文件名称
`%(funcName)s` 表示所在函数名称
`%(thread)d` 表示当前线程ID
`%(threadName)s` 表示当前线程名称
`%(process)d` 表示当前进程ID
`%(processName)s`表示当前进程名称
`%(module)s` 表示当前模块名称
`%(created)f` 表示UNIX标准时间浮点数表示

更多更详细用法请参考