Python学习:配置日志的几种方式

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

作为开发者,我们可以通过以下3种方式来配置logging:
1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数;
2)创建一个日志配置文件,然后使用fileConfig()函数来读取该文件的内容;
3)创建一个包含配置信息的dict,然后把它传递个dictConfig()函数;
需要说明的是,logging.basicConfig()也属于第一种方式,它只是对loggers, handlers和formatters的配置函数进行了封装。另外,第二种配置方式相对于第一种配置方式的优点在于,它将配置信息和代码进行了分离,这一方面降低了日志的维护成本,同时还使得非开发人员也能够去很容易地修改日志配置。
一、使用Python代码实现日志配置

代码如下:
  1. # 创建一个日志器logger并设置其日志级别为DEBUG
  2. logger = logging.getLogger('simple_logger')
  3. logger.setLevel(logging.DEBUG)
  4. # 创建一个流处理器handler并设置其日志级别为DEBUG
  5. handler = logging.StreamHandler(sys.stdout)
  6. handler.setLevel(logging.DEBUG)
  7. # 创建一个格式器formatter并将其添加到处理器handler
  8. formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
  9. handler.setFormatter(formatter)
  10. # 为日志器logger添加上面创建的处理器handler
  11. logger.addHandler(handler)
  12. # 日志输出
  13. logger.debug('debug message')
  14. logger.info('info message')
  15. logger.warn('warn message')
  16. logger.error('error message')
  17. logger.critical('critical message')
复制代码
运行输出:
  1. 2017-05-15 11:30:50,955 - simple_logger - DEBUG - debug message
  2. 2017-05-15 11:30:50,955 - simple_logger - INFO - info message
  3. 2017-05-15 11:30:50,955 - simple_logger - WARNING - warn message
  4. 2017-05-15 11:30:50,955 - simple_logger - ERROR - error message
  5. 2017-05-15 11:30:50,955 - simple_logger - CRITICAL - critical message
复制代码
二、使用配置文件和fileConfig()函数实现日志配置

现在我们通过配置文件的方式来实现与上面同样的功能:
  1. # 读取日志配置文件内容
  2. logging.config.fileConfig('logging.conf')
  3. # 创建一个日志器logger
  4. logger = logging.getLogger('simpleExample')
  5. # 日志输出
  6. logger.debug('debug message')
  7. logger.info('info message')
  8. logger.warn('warn message')
  9. logger.error('error message')
  10. logger.critical('critical message')
  11. 配置文件logging.conf内容如下:
  12. [loggers]
  13. keys=root,simpleExample
  14. [handlers]
  15. keys=fileHandler,consoleHandler
  16. [formatters]
  17. keys=simpleFormatter
  18. [logger_root]
  19. level=DEBUG
  20. handlers=fileHandler
  21. [logger_simpleExample]
  22. level=DEBUG
  23. handlers=consoleHandler
  24. qualname=simpleExample
  25. propagate=0
  26. [handler_consoleHandler]
  27. class=StreamHandler
  28. args=(sys.stdout,)
  29. level=DEBUG
  30. formatter=simpleFormatter
  31. [handler_fileHandler]
  32. class=FileHandler
  33. args=('logging.log', 'a')
  34. level=ERROR
  35. formatter=simpleFormatter
  36. [formatter_simpleFormatter]
  37. format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
  38. datefmt=
复制代码
运行输出:
  1. 2017-05-15 11:32:16,539 - simpleExample - DEBUG - debug message
  2. 2017-05-15 11:32:16,555 - simpleExample - INFO - info message
  3. 2017-05-15 11:32:16,555 - simpleExample - WARNING - warn message
  4. 2017-05-15 11:32:16,555 - simpleExample - ERROR - error message
  5. 2017-05-15 11:32:16,555 - simpleExample - CRITICAL - critical message
复制代码
1. 关于fileConfig()函数的说明:


该函数实际上是对configparser模块的封装,关于configparser模块的介绍请参考
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表