logging模块四大组件:logger、Handler、Filter、Formatter
1) logger:可供程序直接调用的接口。
2) Handler:处理器,将日志记录发送至合适路径
3) Filter:过滤器,更精细地控制哪些日志输出
4) Formatter:格式器。控制日志信息的最终输出格式
Logger
basicConfig(**kwargs)
为日志记录系统做基本配置
filename: 指定日志文件名称
filemode: 指定打开文件的模式(未指定则默认为‘a’)
format: 为处理程序使用指定格式的字符串
datefmt:使用指定的日期格式
level: 设置根记录器(root logger)级别
import logging
#创建Logger记录实例
logging.basicConfig(level=logging.INFO)
Handler
- StreamHandler:将日志记录发送到诸如sys.stdout、sys.stderr或任何类似文件流的对象。
- FileHandler:将日志消息发送到磁盘文件,默认情况下文件大小会无限增长
3)RotatingHandler: 将日志消息发送到磁盘文件,并支持日志文件按大小切割
4)HTTPHandler: 将日志消息以Get或Post方式发送给一个Http服务器
5)SMTPHandler:将日志消息发送给一个指定的Email地址
……
Filter
有多个Handlers和Loggers可使用Filters来过滤
Formatter
使用Formatter对象设置日志信息的规则、结构和内容,默认的时间格式为”%Y-%m-%d %H:%M:%S”
格式 描述
%(levelno)s 打印日志级别的数值
%(levelname)s 打印日志级别名称
%(pathname)s 打印当前执行程序的路径
%(filename)s 打印当前执行程序的名称
%(funcName)s 打印日志的当前函数
%(lineno)d 打印日志的当前行号
%(asctime)s 打印日志的时间
%(thread)d 打印线程ID
%(threadName)s 打印线程名称
%(process)d 打印进程ID
%(message)s 打印日志信息
log.conf
#配置logger信息。必须包含一个名为root的logger,当使用无参函数
#logging.getLogger()时,默认返回root这个logger。其他自定义logger
#可以通过logging.getLogger(“name”)方式进行调用。
[loggers]
keys = root, infoLogger
#logger_xxx:对loggers中声明的logger进行逐个配置,且要一一对应,必须指定level和handlers。
[logger_root]
level = DEBUG
handlers = consoleHandler, fileHandler
[logger_infoLogger]
handlers = consoleHandler, fileHandler
qualname = infoLogger #qualname在logger层级中的名字
propagate = 0 #取值0,输出日志但不传递消息;取值1,输出日志并传递消息
[handlers]
keys = consoleHandler, fileHandler #输出流向:控制台,文件
#handler_xxx:对handlers中声明的handler进行逐个配置,必须指定class和args,args指定输出路径
[handler_consoleHandler]
class = StreamHandler
level = INFO
formatter =form1
args = (sys.stdout,)
[handler_fileHandler]
class = FileHandler
level = INFO
formatter =form2
args = ('log','a')
[formatters]
keys = form1,form2
[formatter_form1]
Format = %(asctime)s %(filename)s[line: %(lineno)d] %(levelname)s:%(message)s
[formatter_form2]
Format = %(asctime)s %(filename)s[line: %(lineno)d] %(levelname)s:%(message)s
import logging
import logging.config
#创建Logger记录器实例
logging.config.fileConfig('log.conf') #读取配置文件
#输出日志到控制台,获取的是root对应的logger
console_logger = logging.getLogger()
fileConfig(fname, defaults=None, disable_existing_loggers=True)方法:从ConfigParse格式的文件中读取日志配置,同时覆盖当前脚本中的log配置,以日志配置文件为准。