【Python】基础部分 -- 常用模块 -- logging 日志记录

1.    logging    日志记录

       为python提供标准的日志接口,可以通过它存储各种格式的日志,logging的日志分为:debug(), info(), warning(), error() 和 critical() 5个级别。

      

1)   常用写法

       import logging

 

       #1.生成对象

       logger = logging.getLogger('hello')

       logger.setLevel(logging.DEBUG) #设置全局等级

 

       #1.1全局设置

       logging.basicConfig(filename='log_test.log',

                       level=logging.DEBUG,

                       format='%(asctime)s %(message)s',

                       datefmt='%m/%d/%Y %I:%M:%S %p')

 

 

       #2.生成handler对象

       ch = logging.StreamHandler()

       fh = logging.FileHandler(filename)

 

       #3.设置局域等级

       ch.setLevel(logging.DEBUG)

       fh.setLevel(logging.INFO)

 

       #4.绑定对象

       logger.addHandler(ch)

       logger.addHandler(fh)

 

       #5.设定格式

       file_formatter = logging.Formatter('%(asctime)s %(name)s- %(levelname)s - %(message)s')

       console_formatter = logging.Formatter('%(asctime)s %(name)s- %(levelname)s - %(message)s')

       ch.setFormatter(console_formatter)

       fh.setFormatter(file_formatter)    

 

       #6.输出

       logger.debug('debug message')

logger.info('info message')

logger.warn('warn message')

logger.error('error message')

logger.critical('critical message')

2)   logger

       提供应用程序可直接使用的接口

       每个程序输出信息之前都要获得一个logger,logger 通常对应了程序的模块名,如:

       LOG = logging.getLogger('chat.gui')

       核心模块可以:

       LOG = logging.getLogger('chat.kernel')

       绑定handler和filters

       Logger.setlevel(lel):指定handler输出的最低级别

       Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter

       Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler

 

3)   handler

       将(logger创建的)日志记录发送到合适的目标输出

       Handler.setLevel(lel):指定输出最低级别

       Handler.setFormatter(): 给这个handler选择格式

       Handler.addFilter(filt)、Handler.removeFilter(filt): 新增或删除一个filter对象    

 

       附加hadler

       logging.SteamHandler 终端输出

       logging.FileHandler 文件输出

       logging.handlers.RotatingFileHandler(filename, mode, maxbytes, backupcount)  根据日志文件大小,生成同名新日志文件(旧的自动被改备份名)

       logging.TimedRotatingFileHandler(filename, when, interval, backupcount) 根据时间创建新的日志文件,when是时间间隔单位,interval是间隔大小

      

4)   formatter

       决定日志记录的最终输出格式,独立组件,可以跟handler组合

       fh = logging.FileHandler('...')

       formatter = logging.Formatter(%(格式名)s)

       fh.setFormatter(formatter)

 

     格式名

       %(levelno)s     数字级别

       %(levelname)s 文本级别

       %(pathname)s 调用输出函数的完整路径名

       %(filename)s   调用输出函数的文件名

       %(module)s    调用输出函数的模块名

       %(funcName)s 调用输出函数的函数名

       %(lineno)s              调用日志输出函数的语句所在行

       %(created)s     当前时间,用UNIX标准的浮点数表示时间

       %(relativeCreated)d       输出日志信息时的,自Logger创建以来的毫秒数

       %(asctime)s     字符串形式的当前时间。默认格式是‘Y-m-d H-M-S,ms’

 

5)   filter

       如果你想对日志进行过滤,就可以自定义一个filter      

       class IgnoreBackuplogFilter(logging.Filter):

               def filter(self, record):

              return 'db backup' not in record.getMessage()

       logger.addFilter(IgnoreBackuplogFilter())

posted @ 2018-05-31 18:11  caya  阅读(92)  评论(0编辑  收藏  举报