python常用模块介绍之三:logging模块



简介:

       Pythonlogging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POSTSMTPSocket等,甚至可以自己实现具体的日志记录方式。

模块提供loggerhandlerfilterformatter

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 -*-

import logging
import os

# 自定义日志级别
level_none =logging.NOTSET
level_debug = logging.DEBUG
level_info = logging.INFO
level_warn = logging.WARN
level_error = logging.ERROR
level_critical = logging.CRITICAL

class CustomLogger(object):
   
def __init__(self, s_name_log,s_path_log= "E:/work", i_level_log=logging.DEBUG):
       
# 自定义一个名为s_name_loglogger
       
self.customLogger = logging.getLogger(s_name_log)

       
# 实例化一个format,定义了log的格式
       
fmt = logging.Formatter('%(asctime)s %(levelname)s %(message)s','%Y-%m-%d %H:%M:%S')
       
# 实例化一个filehanderlog可以将message写入文件中
       
fh =logging.FileHandler(os.path.join(s_path_log, s_name_log))
       
# 实例化一个streamhandlerlog可以将message输出到控制台中
       
sh = logging.StreamHandler()
       
# 实例化一个filter,对loggername进行过滤,如果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)

   
def debug(self, s_message_log):
       
self.customLogger.debug(s_message_log)

   
def info(self, s_message_log):
       
self.customLogger.info(s_message_log)

   
def warning(self, s_message_log):
       
self.customLogger.warning(s_message_log)

   
def error(self, s_message_log):
       
self.customLogger.error(s_message_log)

   
def critical(self, s_message_log):
       
self.customLogger.critical(s_message_log)

 

 

测试自定义的logger

#!/usr/lib/python

# -*- coding: utf-8 -*-



import python_logging

import sys



class 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值