python日志模块----logging

使用Python的logging模块能很好的帮我们完成程序的日志功能,其实它跟Java中的log4j有不少相似的地方。下面记录下今天学习到的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进行 简单的 配置:

 

Python代码   收藏代码
  1. import logging;  
  2.   
  3. # 使用baseConfig()函数,可选参数有filename,filemode,format,datefmt,level,stream  
  4. # 有filename是文件日志输出,filemode是'w'的话,文件会被覆盖之前生成的文件会被覆盖。datafmt参数用于格式化日期的输出  
  5. logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO);  
  6. logger = logging.getLogger("log_demo");  
  7.   
  8. # 使用logger输出日志信息  
  9. logger.debug("debug");  
  10. logger.info("info");  
  11. logger.warning("warning");  
  12. logger.error("error");  
  13. logger.critical("critiacl");  

 

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

 

Python代码   收藏代码
  1. import logging;  
  2.   
  3. # logging模块由logger,handler,filter,fomatter四个部分组成  
  4.   
  5. # 获取一个logger对象  
  6. logger = logging.getLogger("haha");  
  7. # 设置日志输出等级  
  8. logger.setLevel(logging.DEBUG);  
  9. # 创建一个文件的handler  
  10. f_handler = logging.FileHandler("xxx.log");  
  11. f_handler.setLevel(logging.INFO);  
  12. # 创建一个控制台的handler  
  13. c_handler = logging.StreamHandler();  
  14. c_handler.setLevel(logging.WARNING);  
  15. # 设置日志的输出格式  
  16. fmt = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s");  
  17. # 给handler绑定一个fomatter类  
  18. f_handler.setFormatter(fmt);  
  19. c_handler.setFormatter(fmt);  
  20. # 绑定一个handler  
  21. logger.addHandler(f_handler);  
  22. logger.addHandler(c_handler);  
  23.   
  24. # 使用logger输出日志信息  
  25. logger.debug("debug");  
  26. logger.info("info");  
  27. logger.warning("warning");  
  28. logger.error("error");  
  29. logger.critical("critiacl");  

 

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

 

Python代码   收藏代码
  1. import logging  
  2. import logging.config  
  3.   
  4. # 使用配置文件配置logging  
  5. logging.config.fileConfig("config.conf");  
  6. logger = logging.getLogger("simpleExample");  
  7.   
  8. # 使用logger  
  9. logger.debug("debug");  
  10. logger.info("info");  
  11. logger.warning("warning");  
  12. logger.error("error");  
  13. logger.critical("critiacl");  

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

Python代码   收藏代码
  1. [loggers]  
  2. keys=root,simpleExample  
  3.   
  4. [handlers]  
  5. keys=consoleHandler,fileHandler  
  6.   
  7. [formatters]  
  8. keys=simpleFormatter  
  9.   
  10. [logger_root]  
  11. level=DEBUG  
  12. handlers=consoleHandler  
  13.   
  14. [logger_simpleExample]  
  15. level=DEBUG  
  16. handlers=consoleHandler,fileHandler  
  17. qualname=simpleExample  
  18. propagate=0  
  19.   
  20. [handler_consoleHandler]  
  21. class=StreamHandler  
  22. level=DEBUG  
  23. formatter=simpleFormatter  
  24. args=(sys.stdout,)  
  25.   
  26. [handler_fileHandler]  
  27. class=FileHandler  
  28. level=WARNING  
  29. formatter=simpleFormatter  
  30. args=("file_config_log.log""a")  
  31.   
  32. [formatter_simpleFormatter]  
  33. format=%(asctime)s - %(name)s - %(levelname)s - %(message)s  
  34. 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,输出的结果会是:

Python代码   收藏代码
  1. 2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug  
  2. 2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug  
  3. 2012-08-06 23:07:18,483 - simpleExample - INFO - info  
  4. 2012-08-06 23:07:18,483 - simpleExample - INFO - info  
  5. 2012-08-06 23:07:18,483 - simpleExample - WARNING - warning  
  6. 2012-08-06 23:07:18,483 - simpleExample - WARNING - warning  
  7. 2012-08-06 23:07:18,483 - simpleExample - ERROR - error  
  8. 2012-08-06 23:07:18,483 - simpleExample - ERROR - error  
  9. 2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl  
  10. 2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl  

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

你可能感兴趣的:(python)