python的logging类
来源:互联网 发布:手机淘宝首页海报尺寸 编辑:程序博客网 时间:2024/06/01 22:34
一、StreamHandler
流handler——包含在logging模块中的三个handler之一。
能够将日志信息输出到sys.stdout, sys.stderr 或者类文件对象(更确切点,就是能够支持write()和flush()方法的对象)。
只有一个参数:
class logging.StreamHandler(stream=None)
日志信息会输出到指定的stream中,如果stream为空则默认输出到sys.stderr。
二、FileHandler
logging模块自带的三个handler之一。继承自StreamHandler。将日志信息输出到磁盘文件上。
构造参数:
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
模式默认为append,delay为true时,文件直到emit方法被执行才会打开。默认情况下,日志文件可以无限增大。
三、NullHandler
空操作handler,logging模块自带的三个handler之一。
没有参数。
四、WatchedFileHandler
位于logging.handlers模块中。用于监视文件的状态,如果文件被改变了,那么就关闭当前流,重新打开文件,创建一个新的流。由于newsyslog或者logrotate的使用会导致文件改变。这个handler是专门为Linux/unix系统设计的,因为在windows系统下,正在被打开的文件是不会被改变的。
参数和FileHandler相同:
class logging.handlers.WatchedFileHandler(filename, mode='a', encoding=None, delay=False)
五、RotatingFileHandler
位于logging.handlers支持循环日志文件。
class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)
参数maxBytes和backupCount允许日志文件在达到maxBytes时rollover.当文件大小达到或者超过maxBytes时,就会新创建一个日志文件。上述的这两个参数任一一个为0时,rollover都不会发生。也就是就文件没有maxBytes限制。backupcount是备份数目,也就是最多能有多少个备份。命名会在日志的base_name后面加上.0-.n的后缀,如example.log.1,example.log.1,…,example.log.10。当前使用的日志文件为base_name.log。
六、TimedRotatingFileHandler
定时循环日志handler,位于logging.handlers,支持定时生成新日志文件。
class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)
参数when决定了时间间隔的类型,参数interval决定了多少的时间间隔。如when=‘D’,interval=2,就是指两天的时间间隔,backupCount决定了能留几个日志文件。超过数量就会丢弃掉老的日志文件。
when的参数决定了时间间隔的类型。两者之间的关系如下:
'S' | 秒 'M' | 分 'H' | 时 'D' | 天 'W0'-'W6' | 周一至周日 'midnight' | 每天的凌晨
utc参数表示UTC时间。
七、其他handler——SocketHandler、DatagramHandler、SysLogHandler、NtEventHandler、SMTPHandler、MemoryHandler、HTTPHandler
这些handler都不怎么常用,所以具体介绍就请参考官方文档 其他handlers
下面使用简单的例子来演示handler的使用:
例子一——不使用配置文件的方式(StreamHandler):
import logging# set up logging to file - see previous section for more detailslogging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', datefmt='%m-%d %H:%M', filename='/temp/myapp.log', filemode='w')# define a Handler which writes INFO messages or higher to the sys.stderr# console = logging.StreamHandler()console.setLevel(logging.INFO)# set a format which is simpler for console use#设置格式formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')# tell the handler to use this format#告诉handler使用这个格式console.setFormatter(formatter)# add the handler to the root logger#为root logger添加handlerlogging.getLogger('').addHandler(console)# Now, we can log to the root logger, or any other logger. First the root...#默认使用的是root loggerlogging.info('Jackdaws love my big sphinx of quartz.')# Now, define a couple of other loggers which might represent areas in your# application:logger1 = logging.getLogger('myapp.area1')logger2 = logging.getLogger('myapp.area2')logger1.debug('Quick zephyrs blow, vexing daft Jim.')logger1.info('How quickly daft jumping zebras vex.')logger2.warning('Jail zesty vixen who grabbed pay from quack.')logger2.error('The five boxing wizards jump quickly.')
输出到控制台的结果:
root : INFO Jackdaws love my big sphinx of quartz.myapp.area1 : INFO How quickly daft jumping zebras vex.myapp.area2 : WARNING Jail zesty vixen who grabbed pay from quack.myapp.area2 : ERROR The five boxing wizards jump quickly.
例子二——使用配置文件的方式(TimedRotatingFileHandler) :
log.conf 日志配置文件:
[loggers]keys=root,test.subtest,test[handlers]keys=consoleHandler,fileHandler[formatters]keys=simpleFormatter[logger_root]level=INFOhandlers=consoleHandler,fileHandler[logger_test]level=INFOhandlers=consoleHandler,fileHandlerqualname=tornadopropagate=0[logger_test.subtest]level=INFOhandlers=consoleHandler,fileHandlerqualname=rocket.raccoonpropagate=0[handler_consoleHandler] #输出到控制台的handlerclass=StreamHandlerlevel=DEBUGformatter=simpleFormatterargs=(sys.stdout,)[handler_fileHandler] #输出到日志文件的handlerclass=logging.handlers.TimedRotatingFileHandlerlevel=DEBUGformatter=simpleFormatterargs=('rocket_raccoon_log','midnight')[formatter_simpleFormatter]format=[%(asctime)s-%(name)s(%(levelname)s)%(filename)s:%(lineno)d]%(message)sdatefmt=logging.config.fileConfig('conf/log.conf')logger = getLogging()
获取logger方法:
def getLogging(): return logging.getLogger("test.subtest")
配置logger并且调用:
logging.config.fileConfig('conf/log.conf')logger = getLogging()logger.info("this is an example!")
控制台和日志文件中都会输出:
[2016-07-01 09:22:06,470-test.subtest(INFO)main.py:55]this is an example!
Python 模块中的logging模块的handlers大致介绍就是这样。
- python的logging类
- python的logging库
- python的logging模块
- python的logging模块
- python 的logging
- python的logging
- python 的 logging 模块
- python logging的学习
- Python 的Logging模块
- Python的logging
- python 的logging模块
- python的logging使用
- Python的logging使用
- python logging的使用
- python 的logging模块
- 使用Python的logging.config
- python的日志工具logging
- Python的标准logging模块
- 数据分析(工具)及架构
- 分水岭分割
- bash编程之 awk格式化输出
- php ob_flush无效
- Ubuntu16.04下安装CUDA8.0和tensorflow
- python的logging类
- Hbase API操作优化
- Button被RecyclerView覆盖导致无法点击的问题
- Hbase原子性操作
- firefox解决 显示 您的连接不安全
- 计算Fibonacci数
- EXCEL常用函数笔记
- bash编程之 shell基本语法
- Linux进程全解11——进程间通信(IPC)概述