logging模块

简介

logging模块是python日志管理模块

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
In [19]: import logging

In [20]: logging.critical('this is critical msg')
CRITICAL:root:this is critical msg

In [21]: logging.error('this is error msg')
ERROR:root:this is error msg

In [22]: logging.warning('this is warning msg')
WARNING:root:this is warning msg

In [23]: logging.info('this is info msg')

In [24]: logging.debug('this is debug msg')

日志级别:

CRITICAL > ERROR > WARNING(默认) > INFO > DEBUG > NOTSET

默认日志格式:

LOGLEVEL:LOGGERNAME:msg

日志级别,日志格式,输出位置设置

使用logging.basicConfig进行日志输出信息配置

1
2
3
4
5
6
logging.basicConfig(level=logging.DEBUG,
format='',
datefmt='',
filemode='',
filename=''
)

参数说明:

1.level:指定日志记录级别,可选值logging.ERROR/WARNING/INFO/DEBUG
2.format:指定日志输出格式:

参数 说明
%(name)s Logger的名字
%(levelno)s 数字日志级别
%(levelname)s 文本日志级别
%(pathname)s 调用日志输出函数的模块文件路径
%(filenames)s 调用日志输出函数的模块文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数语句所在行号
%(created)f 当前时间
%(relativeCreated)d 当前时间
%(asctime)s 当前时间,格式’2015-05-28 20:50:03,345’
%(thread)d 线程id
%(threadName)s 线程名
%(process)d 进程id
%(message)s 消息

3.datefmt:指定日志中日期格式
4.filemode:指定文件打开方式
5.filename:指定日志文件位置
6.stream:制定stream创建StreamHandler,若同时存在filename和stream时,filename启用

logging.getLogger()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import logging

logger = logging.getLogger()

mlogger = logging.getLogger('com.uk.silence')
mlogger.setLevel(logging.INFO)

fh = logging.FileHandler('/tmp/test.log')

ch = logging.StreamHandler()

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s:%(message)s')

fh.setFormatter(formatter)
ch.setFormatter(formatter)

mlogger.addHandler(fh)
mlogger.addHandler(ch)

logger.info('this is info msg')
logger.error('this is error msg')

mlogger.debug('this is debug msg')
mlogger.info('this is info msg')

m2logger = logging.getLogger('com.uk.silence.child')

m2logger.debug('this is debug msg')
m2logger.info('this is info msg')

logger说明:
logging.getLogger为默认根logger,logger为树形结构, 在使用m2logger时并为设置hander、formatter、level,但其输出与mlogger相同,原因logger具有继承功能(按名称进行属性继承)

logger.Filter('com.uk.silence')用于定义filter功能,表示只有以com.uk.silence.child开头的logger进行信息输出,按示例若指定mlogger.addFilter(filter)后使用mlogger.error则不能输出日志

handler说明:

类型 说明
logging.StreamHandler 指定向流对象进行
logging.FileHandler 指定文件
logging.handlers.RotaingFileHandler 指定文件,但可管理文件大小,当超过指定值后则重新创建日志文件
logging.handlers.TimedRotatingFileHandler 指定文件,超过指定周期后重新创建日志文件
logging.handlers.SocketHandler 指定socket
logging.handlers.SyslogHandler 指定syslog服务器
logging.handlers.HTTPHandler 使用post/get请求提交数据到web服务器

logging.config.fileConfig

使用文件方式进行日志管理配置,配置文件格式如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[loggers]
keys=root,comuksilence,comuksilencechild

[handlers]

keys=file

[formatters]

keys=basic

[logger_root]

level=WARNING
handlers=file

[logger_comuksilence]

level=INFO
handlers=file
qualname=com.uk.silence
propagate=0

[logger_comuksilencecomchild]

qualname=com.uk.silence.child

[handler_file]

class=FileHandler
formatter=basic
args=('/tmp/test.log')

[formatter_basic]

format=%(asctime)s - %(name)s - %(levelname)s:%(message)s
datefmt=