logging模块主要有以下几个对象
- logger对象
logger = logging.getLogger()
logger.setLevel(logging.DEBUG) //默认是ERROR级别,所以INFO和DEBUG是打不出来的
- handler对象
fh = logging.FileHandler('/tmp/test.log')
ch = logging.StreamHandler()
- formatter对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- filter对象
目前用不到,暂时忽略
几个对象之间的关系
- 在handler对象中设置格式(由formatter对象决定)
fh.setFormatter(formatter)
ch.setFormatter(formatter)
- 在logger对象中设置输出位置(由handler对象决定)
logger.addHandler(fh)
logger.addHandler(ch)
总结
定义formatter——决定输出格式
定义handler——决定输出位置
定义logger——最终程序调用的日志接口
将formatter绑定到handler上;再将handler绑定至logger上
这样就可以使用logger对象进行输出日志了。如:logger.info('test')
可以直接使用以下的配置文件
[loggers]
keys = root
[handlers]
keys = console, info, error
[formatters]
keys = baseFormatter
[logger_root]
level = NOTSET
handlers = console, info, error
propagate = 0
[handler_console]
level = NOTSET
class = StreamHandler
formatter = baseFormatter
args = (sys.stdout,)
[handler_info]
level = INFO
class = handlers.TimedRotatingFileHandler
formatter = baseFormatter
args = ('./log/info.log', 'midnight', 1)
[handler_error]
level = ERROR
class = handlers.TimedRotatingFileHandler
formatter = baseFormatter
args = ('./log/error.log', 'midnight', 1)
[formatter_baseFormatter]
format = %(asctime)s %(levelname)s %(message)s
使用方法如下
import logging
import logging.config
logging.config.fileConfig('/Users/sgrchan/Downloads/logging.ini')
logger = logging.getLogger()
logger.info('test')