python常用模块介绍之三:logging模块
来源:互联网 发布:淘宝上架时间查询 编辑:程序博客网 时间:2024/05/22 00:29
简介:
Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。
模块提供logger,handler,filter,formatter。
1. logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。
2. handler:将日志记录(logrecord)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。
3. filter:提供一种优雅的方式决定一个日志记录是否发送到handler。
4. formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。
备注:
一般在大型的项目中,由于有多个文件需要输出log,所以需要重写logging模块,达到自定义文件输出格式,输出路径等一系列统一的要求,能省去多次重复定义logging。
具体如下例:
重写了logger类
#!/usr/lib/python
# -*- coding: utf-8 -*-
importlogging
importos
#自定义日志级别
level_none =logging.NOTSET
level_debug = logging.DEBUG
level_info = logging.INFO
level_warn = logging.WARN
level_error = logging.ERROR
level_critical = logging.CRITICAL
classCustomLogger(object):
def__init__(self, s_name_log,s_path_log= "E:/work", i_level_log=logging.DEBUG):
#自定义一个名为s_name_log的logger
self.customLogger = logging.getLogger(s_name_log)
#实例化一个format,定义了log的格式
fmt = logging.Formatter('%(asctime)s %(levelname)s %(message)s','%Y-%m-%d %H:%M:%S')
#实例化一个filehander,log可以将message写入文件中
fh =logging.FileHandler(os.path.join(s_path_log, s_name_log))
#实例化一个streamhandler,log可以将message输出到控制台中
sh = logging.StreamHandler()
#实例化一个filter,对logger的name进行过滤,如果s_name_log=='JeremyLogging',输出;反之,过滤掉
# 这个filter可以配置到handler中,也可以直接配置到logger中
ft = logging.Filter('JeremyLogging')
fh.setFormatter(fmt)
fh.setLevel(i_level_log)
# fh.addFilter(ft)
sh.setFormatter(fmt)
sh.setLevel(i_level_log)
sh.addFilter(ft)
self.customLogger.addHandler(fh)
self.customLogger.addHandler(sh)
self.customLogger.addFilter(ft)
defdebug(self, s_message_log):
self.customLogger.debug(s_message_log)
definfo(self, s_message_log):
self.customLogger.info(s_message_log)
defwarning(self, s_message_log):
self.customLogger.warning(s_message_log)
deferror(self, s_message_log):
self.customLogger.error(s_message_log)
defcritical(self,s_message_log):
self.customLogger.critical(s_message_log)
测试自定义的logger类
#!/usr/lib/python# -*- coding: utf-8 -*-import python_loggingimport sysclass JeremyLogging(object): def __init__(self): self.logger = python_logging.CustomLogger(self.__class__.__name__, i_level_log=python_logging.level_info) def testFunc1(self): self.logger.info('[%s.%s]: jeremy test info' % (self.__class__.__name__, sys._getframe().f_code.co_name)) self.logger.debug('[%s.%s]: jeremy test debug' % (self.__class__.__name__, sys._getframe().f_code.co_name)) self.logger.error('[%s.%s]: jeremy test error' % (self.__class__.__name__, sys._getframe().f_code.co_name))log = JeremyLogging()log.testFunc1()
输出结果:
控制台中显示:
2016-09-27 16:37:21 ERROR[JeremyLogging.testFunc1]: jeremy test error
文本中显示: cat E:/work/ JeremyLogging
2016-09-27 16:37:21 ERROR [JeremyLogging.testFunc1]: jeremytest error
- python常用模块介绍之三:logging模块
- python 之logging模块
- Python模块之logging
- python模块之 - logging
- python之logging模块
- python之logging模块
- python logging 模块(三)
- Python Howto 之 logging 模块
- python模块系列之-logging
- python模块 ---logging模块
- python常用模块介绍
- python 常用模块介绍
- Python常用模块介绍
- Python常用模块介绍
- python常用模块介绍
- Python 常用模块介绍
- python 常用模块介绍
- python模块介绍- logging 日志工具
- listview 使用方法
- 笔记:日期字符串的严格校验方式
- SWUST626 分数分解
- 操作系统的优先读者和优先写着的读者/写着问题
- c#实现对MP4等文件属性信息的读取以及对txt文件内容的读取
- python常用模块介绍之三:logging模块
- STM32的USB相关资料(转载)
- 洛谷P1002 Codevs1011 过河卒 --2002年NOIP全国联赛普及组 dp递推
- PS怎么修改数字如 2011变为2013
- linux上apache源码安装
- QFile 类 用法
- 移动开发中如何整合HTML 5和原生代码
- 哈希表的实现
- MyBatis起步