py的logging模块

谨记提醒自己:不止要知道用法,还要理解清楚为什么。

logging可以使用配置的选项logger、handler、formater。

一.logger:是logging的主体。 1.为程序提供记录日志的接口。 2.判断日志所处级别,并判断是否要过滤。 3.根据日志级别将日志分发给不同的handler。 常用函数: logger.setlevel() 设置日志级别。 logger.addhandler()和logger.removehandler() 添加和删除一个handler。 logger.addfilter() 添加一个filter。

二.handler:基于日志级别对日志进行分发,如设置warning级别的handler只会处理warning及以上级别的日志。 例如:可以将一个应用所有的日志打印到文件中,error及以上的打印到屏幕,critical级别的日志发邮件。 常用函数: setlevel() 设置级别。 setformatter() 设置格式。

三.formatter:配置日志格式,参数是日志格式fmt和时间格式datefmt。

关于常用handlers 1.StreamHandler:流handler,能将日志输出到sys.stdout,sys.stderr或者文件对象。 2.Filehadnler:继承自StreamHandler,将日志信息输出到磁盘文件。 3.NullHandler:空操作handler。 4.WatchedFileHandler:位于logging.handlers模块中。用于监视文件的状态,如果文件被改变了,那么就关闭当前流,重新打开文件,创建一个新的流。由于newsyslog或者logrotate的使用会导致文件改变。这个handler是专门为linux/unix系统设计的,因为在windows系统下,正在被打开的文件是不会被改变的。 5.RotatingFileHandler:位于logging.handlers支持循环日志文件。 6.TimedRotatingFileHandler:定时循环日志handler,位于logging.handlers,支持生成新日志文件。

注:经常使用的handlers,StreamHandler、Filehadnler。

为了让日志能够保证捕获到正常的信息,需要定义好哪些日志往哪输出。在Linux里,有三种方式:标准输入、标准输出、标准错误。logging模块需要定义好对应的输出方式,才能更好的捕获到对应的输出。 例如:

logger 的定义

[loggers] keys=root,basicsLogger

[logger_root] level=INFO handlers=infoHandler,errorHandler,fileHandler

[logger_basicsLogger] level=INFO handlers=infoHandler,errorHandler,fileHandler qualname=basicsLogger propagate=0

handler 的定义

[handlers] keys=infoHandler,errorHandler,fileHandler

[handler_infoHandler] class=StreamHandler level=INFO formatter=basicsFormatter args=(sys.stdout,)

[handler_errorHandler] class=StreamHandler level=ERROR formatter=basicsFormatter args=(sys.stderr,)

[handler_fileHandler] class=FileHandler level=INFO formatter=basicsFormatter args=('/data/home/user00/Initialization.log','a')

formatter 的定义

[formatters] keys=basicsFormatter

[formatter_basicsFormatter] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s datefmt=

其中两个handler:handler_infoHandler、handler_errorHandler,一个定义了INFO级别以上的都输出到标准输出,一个定义ERROR级别以上的都输出到标准错误。这样就可以正确的捕获错误异常。

About
高洋,IT从业人员, 1989年4月10日, 邮箱:gy59821@163.com, 现就职于北京玩蟹科技有限公司.