logging 日志模块学习
2016-12-14 17:02
309 查看
logging
日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现。简单的在屏幕上体现
logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印: WARNING:root:This is warning message
默认情况下,logging将日志打印到屏幕,日志级别为WARNING;
日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别
#/usr/bin/python #coding:utf-8 import logging import sys,os import pdb class MyLog(object): ''' Usage: mylog = MyLog() logger = mylog.getLog() logger.debug('test...') logger.info('test...') logger.warning('test...') logger.error('test...') logger.critical('test...') 默认日志输出到日志文件 缺省日志名字:调用者文件名后缀变为log 例如:my.py 调用mylog模块 则日志名字my.log 如果需要设置自己的日志名字则:mylog.setLog(filename,loglevel) 如果同时向输出到屏幕则需要使用:mylog.openConsole(self,is_control = True,log_level = None)方法 ''' debug = logging.DEBUG info = logging.INFO warning = logging.WARNING error = logging.ERROR critical = logging.CRITICAL def __init__(self,log_level = logging.WARNING): self.log_level = log_level try: self.default_log_file = os.path.basename(sys.argv[0]).split('.')[0] + '.log' except: self.default_log_file = os.path.basename(sys.argv[0]) + '.log' logging.basicConfig(level=log_level, format ='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt ='%a, %d %b %Y %H:%M:%S', filename = self.default_log_file, filemode ='w') @classmethod def _getFormatter(cls): fmt = logging.Formatter(fmt ='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt ='%a, %d %b %Y %H:%M:%S') return fmt def getLog(self): if not hasattr(self,'_logger'): self._logger = logging.getLogger() return self._logger def setLog(self,log_filename = None,log_level = None): if not hasattr(self,'_logger'): self._logger = logging.getLogger() else: #_handler存在,则移除旧_handler if hasattr(self,'_handler'): self._logger.removeHandler(self._handler) #实例化一个_hander if log_filename is None: log_filename = self.default_log_file self._handler=logging.FileHandler(log_filename) #set log Formatter fmt = MyLog._getFormatter() self._handler.setFormatter(fmt) self._logger.addHandler(self._handler) if log_level is None: log_level = self.log_level self._logger.setLevel(log_level) def openConsole(self,is_control = True,log_level = None): ''' 默认输出屏幕级别与输出到日志的级别一致 如果关闭屏幕输出:is_control 设置为False ''' if not hasattr(self,'_logger'): self._logger = logging.getLogger() if is_control: fmt = MyLog._getFormatter() self._console = logging.StreamHandler() if log_level is not None: try: self._console.setLevel(log_level) except: raise Exception('log_level is Error!') self._console.setFormatter(fmt) self._logger.addHandler(self._console) else: if hasattr(self,'_console'): self._logger.removeHandler(self._console) if __name__=='__main__': #pdb.set_trace() mylog = MyLog() mylog.setLog('11.log',logging.DEBUG) logger = mylog.getLog() mylog.openConsole() logger.info('Test...') mylog.openConsole(False) logger.info('close console...')
View Code
相关文章推荐
- 微信公众号java sdk技术选型
- 【Mybatis框架】查询缓存(一级缓存)
- Android自动化测试 -- Monkey
- 数据导出excel表功能
- 【安卓学习之第三方库】库的使用3-不能访问资源ID问题
- 《自己动手写网络爬虫》笔记3-宽度优先遍历互联网
- 8.11.4 使用迭代器
- 非小型电子商务系统设计经验分享
- Adapter适配器的区别小结
- 15索引器
- 普通sqlite和谷歌API操作数据区别小结
- [置顶] 记录:Android api 24+的TabLayout问题处理
- 如何使用 Git 管理二进制大对象
- BitmapFactory.decodeXXX()方法小结
- IIS和Tomcat共用80端口的解决方案
- Web前端开发人员和设计师必读文章推荐【系列一】至【系列十二】
- Android 源码在线查看
- Android 镂空效果的遮罩层实现
- 类中implements Serializable有什么作用
- 内容解析者调用提供者套路