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. # 使用logging输出日志信息  
  7. logging.debug("debug");  
  8. logging.info("info");  
  9. logging.warning("warning");  
  10. logging.error("error");  
  11. logging.critical("critiacl");  
  12.  

   通过初始化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类型的初始化函数的参数

原文地址:https://www.cnblogs.com/yoyo008/p/9239131.html