• logging模块知识点及应用小结


    Logging模块知识点:

    一.分为5个级别:debug(),info(),warning(),error(),critical()。级别由低到高

     1.1最简单的用法:

     

    1.2 如果想把日志写到文件里:logging.basicConfig()方法

     

    whw.log文件里的内容为:

     

    注意后面那句level=’logging.INFO’的意思是把日志的记录级别设置为INFO,也就是说,只有日志是INFO或者比INFO级别高的日志才会被记录到文件里面。如上面的例子中debug的级别低于info所以whw.log日志文件里不会记录logging.debug()方法中的信息。如果希望记录debug的日志,只要将级别设置为DEBUG就可以了。

    注意如果不设置日志级别,那么默认的日志级别是warning。

    二.自定义日志格式

    1.日志中增加时间信息:

     

    whw.log文件中的内容为:(运行2次的结果)

     

    除了加时间还可以定义一大堆格式,如下表所示:

     

    三.日志同时输出到屏幕和文件

    1.python使用logging模块记录日志涉及4个主要的类:

    (1)logger:提供了应用程序可以直接使用的接口;

    (2)handler:将(logger创建的)日志记录发送到合适的目的输出;

    (3)filter:提供了细度设备来决定输出那条日志记录;(用的不多)

    (4)formatter:决定日志记录的最终输出格式。

    例一:同时输出到文件与屏幕(含filter过滤)

    import logging
    
    class IgnoreBackupLogFilter(logging.Filter):
        """忽略带db backup 的日志"""
        def filter(self, record): #固定写法
            return   "db backup" not in record.getMessage()
    #1.生成logger对象#############################################
    whw_logger = logging.getLogger('whw_web')
    #设置日志级别(这里是全局的)全局的默认级别为warning
    whw_logger.setLevel(logging.DEBUG)
    #1.1 把filter对象添加到logger中就可以支持过滤
    whw_logger.addFilter(IgnoreBackupLogFilter())
    #注意,如果全局设置为DEBUG,console handler设置为INFO,如果输出日志级别为debug,那就不会在日志中打印
    #全局先过滤一遍
    #2.生成handler对象##############################################
    whw_co = logging.StreamHandler()#屏幕~~~
    #可以在handler中设置级别:控制屏幕的不同的日志级别与输出
    whw_co.setLevel(logging.WARNING)
    whw_fh = logging.FileHandler('whw_web.log')#文件~~~
    #可以在handler中设置级别:控制文件的不同的日志级别与输出
    whw_fh.setLevel(logging.ERROR)
    #2.1 把handler对象绑定到logger对象中
    whw_logger.addHandler(whw_co)
    whw_logger.addHandler(whw_fh)
    #3.生成formatter对象############################################
    #文件
    file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    #屏幕
    console_formatter = logging.Formatter('%(asctime)s - %(name)s -%(lineno)s- %(levelname)s - %(message)s')
    #3.1 把formatter对象绑定到handler对象中
    #屏幕+文件
    whw_co.setFormatter(console_formatter)
    whw_fh.setFormatter(file_formatter)
    
    #########输出日志#################################################
    whw_logger.debug('whwhwhwhwh,db backup')
    whw_logger.info('whwhwhwhwh,db backup')
    whw_logger.warning('whwhwhwhwh,db backup')
    whw_logger.error('whwhwhwhwh') 

    例一的输出结果为:

    例二:日志的自动截断

    import logging
    from logging import handlers
    
    whw_logger = logging.getLogger(__name__)
    
    log_file = "whw_log.log"
    
    
    fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3)
    #也可:fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=10,backupCount=3)
    
    formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s')
    
    fh.setFormatter(formatter)
    
    whw_logger.addHandler(fh)
    
    whw_logger.warning('whehejwwj')
    whw_logger.warning('kjdswewi')
    whw_logger.error('wwhwwl')
    

    例二的运行结果如下:

  • 相关阅读:
    youtube-VisualSfM and MeshLab workflow video-meshlab part integration
    testing_lab1
    homework2-st
    homework1-spm
    homework1-st
    just one last blog
    week 10
    week 9
    week 8
    课后题7
  • 原文地址:https://www.cnblogs.com/paulwhw/p/8727802.html
Copyright © 2020-2023  润新知