python设置报错日志baseconfig配置

来源:网络 文章列表 2019-07-12 8
logging模块可以实现Python程序的错误日志功能。通过使用baseConfig()函数就可以对logging进行一个日志配置。包括输出的格式和错误等级,记录的文件目录

使用Python的logging模块能很好的帮我们完成程序的错误日志功能。

          1)像其它的语言那样,python里的logging信息同样也是分为5个等级,从低到高依次是:DEBUG,INFO,WARNING,ERROR,CRITICAL

          2)python中,logging由logger,handler,filter,formater四个部分组成,logger是提供我们记录日志的方法;handler是让我们选择日志的输出地方,如:控制台,文件,邮件发送等,一个logger添加多个handler;filter是给用户提供更加细粒度的控制日志的输出内容;formater用户格式化输出日志的信息。

          3)logger的级别划分,python中, root是默认的最高级别的,其它的logger的级别通过"."来划分等级,如:bao,bao.a,bao.b三个logger,bao.a和bao.b都的级别都低于bao,依此类推。

          4)python中配置logging有三种方式:

               第一 、在程序中完成logger,handler,filter,formater的实例化被配置好logging,然后再使用logging取得logger进行日志操作。

               第二 、使用配置文件的方式配置logging,使用fileConfig(filename,defaults=None,disable_existing_loggers=Ture )函数来读取配置文件。

               第三 、使用一个字典方式来写配置信息,然后使用dictConfig(dict,defaults=None,disable_existing_loggers=Ture )函数来瓦按成logging的配置 。(这个方式没有仔细看,所以没有怎么说,具体可以看文档)

          注意: 在使用第二种和三种方式配置logging的时候,第三个参数默认值是True,当它为True的时候,在这之前定义的logging配置就是失效,不能再使用,也就是只有配置文件或者配置字典里有的内容才能使用。如果先让之前的logging配置依然有限就要把这个参数设为False,或者一直就是使用配置文件或者配置字典的方式来对logging进行配置。

      

           下面我们使用代码logging的代码来说明:

   使用baseConfig()函数对 logging进行 简单的 配置:

import logging

logging.basicConfig(level=logging.INFO,
                    format='%(levelname)s %(asctime)s [%(filename)s:%(lineno)d] %(message)s',
                    datefmt='%Y.%m.%d. %H:%M:%S',
                    # filename='parser_result.log',
                    # filemode='w'
                    )

log = logging.getLogger(__name__)

if __name__ == '__main__':
     # 使用logger输出日志信息
    log.info('this is a log')
    log.debug("debug");  
    log.info("info");  
    log.warning("warning");  
    log.error("error");  
    log.critical("critiacl");  

输出格式如下:

INFO 2019.07.12. 16:31:51 [mylog.py:11] this is a log

...

说明: 

  • # 使用baseConfig()函数,可选参数有filename,filemode,format,datefmt,level,stream  
  • # 有filename是文件日志输出,filemode是'w'的话,文件会被覆盖之前生成的文件会被覆盖。datafmt参数用于格式化日期的输出  

 通过初始化logger,handler,formater来配置logging:

     import logging;  
      
    # logging模块由logger,handler,filter,fomatter四个部分组成  
      
    # 获取一个logger对象  
    logger = logging.getLogger("haha");  
    # 设置日志输出等级  
    logger.setLevel(logging.DEBUG);  
    # 创建一个文件的handler  
    f_handler = logging.FileHandler("xxx.log");  
    f_handler.setLevel(logging.INFO);  
    # 创建一个控制台的handler  
    c_handler = logging.StreamHandler();  
    c_handler.setLevel(logging.WARNING);  
    # 设置日志的输出格式  
    fmt = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s");  
    # 给handler绑定一个fomatter类  
    f_handler.setFormatter(fmt);  
    c_handler.setFormatter(fmt);  
    # 绑定一个handler  
    logger.addHandler(f_handler);  
    logger.addHandler(c_handler);  
      
    # 使用logger输出日志信息  
    logger.debug("debug");  
    logger.info("info");  
    logger.warning("warning");  
    logger.error("error");  
    logger.critical("critiacl");  

使用配置文件实现logging的配置:

     import logging  
    import logging.config  
      
    # 使用配置文件配置logging  
    logging.config.fileConfig("config.conf");  
    logger = logging.getLogger("simpleExample");  
      
    # 使用logger  
    logger.debug("debug");  
    logger.info("info");  
    logger.warning("warning");  
    logger.error("error");  
    logger.critical("critiacl");  

与之对应的配置文件内容如下:

     [loggers]  
    keys=root,simpleExample  
      
    [handlers]  
    keys=consoleHandler,fileHandler  
      
    [formatters]  
    keys=simpleFormatter  
      
    [logger_root]  
    level=DEBUG  
    handlers=consoleHandler  
      
    [logger_simpleExample]  
    level=DEBUG  
    handlers=consoleHandler,fileHandler  
    qualname=simpleExample  
    propagate=0  
      
    [handler_consoleHandler]  
    class=StreamHandler  
    level=DEBUG  
    formatter=simpleFormatter  
    args=(sys.stdout,)  
      
    [handler_fileHandler]  
    class=FileHandler  
    level=WARNING  
    formatter=simpleFormatter  
    args=("file_config_log.log", "a")  
      
    [formatter_simpleFormatter]  
    format=%(asctime)s - %(name)s - %(levelname)s - %(message)s  
    datefmt=  

上面的配置文件中:由[loggers],[handlers],[formaters] 信息,keys对应实例化是他们的名称,多个用逗号隔开。然后再分别配置各个logger,handler,formaters。以logger为例,logger下有root和simpleExample两个logger,就要配置[logger_root]和[logger_simpleExample];类似的,handler和formater也是这样。

在[logger_name] 中的参数purlname ,是设置logging.getLoger(name)中的name值;propagete参数 :propagete=0,表示输出日志,但消息不传递;propagate=1是输出日志,同时消息往更高级别的地方传递。若上面配置文件参数progagate=1,simpleExample的更高级logger有root,输出的结果会是:

    2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug  
    2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug  
    2012-08-06 23:07:18,483 - simpleExample - INFO - info  
    2012-08-06 23:07:18,483 - simpleExample - INFO - info  
    2012-08-06 23:07:18,483 - simpleExample - WARNING - warning  
    2012-08-06 23:07:18,483 - simpleExample - WARNING - warning  
    2012-08-06 23:07:18,483 - simpleExample - ERROR - error  
    2012-08-06 23:07:18,483 - simpleExample - ERROR - error  
    2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl  
    2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl  

最后是 [hander_name] 配置下的args参数,其实就是你使用的handler类型的初始化函数的参数。

 

腾讯云限量秒杀

1核2G 5M 50元/年 2核4G 8M 74元/年 4核8G 5M 818元/年 CDN流量包 100GB 9元

版权声明

本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:
愿本站的内容能为您的学习、工作带来绵薄之力。

评论

  • 随机获取
点击刷新
精彩评论

友情链接