python-logging

基本用法

使用建议

logging提供了一些很方便的函数用来做记录日志的工作,它们有debug(), info(), warning(), error()和critical(),下面列举了一些建议关于什么时候使用这些函数

  1. 在命令行中展示基本的信息:时用print函数即可
  2. 报告程序执行过程中正常的输出:使用logging.info()(或者logging.debug()),可以用以输出极为详细的信息,用于诊断程序的运行状况
  3. 报告程序运行时遇到的需要给出提醒的事件:使用logging.warn()或者logging.warning()
    warn应表明该问题是可以避免的,应该通过修改优化程序剔除这类消息
    warning应表明程序对这种问题无能为力,但应该报告
  4. 报告一个运行时的错误:Raise一个异常
  5. 报告一个错误而不raise,适用于长时间运行的服务端程序:使用logging.error(),logging.exception()或者logging.critical()

logging函数是使用它们要报告的信息的级别来命名的,对它们的描述如下

  1. DEBUG 详尽的信息,通常用于诊断问题
  2. INFO 确认事件如期发生
  3. WARNING 表明一些非预期的事件可能发生,但程序仍能正常运行
  4. ERROR 程序发生错误,某些功能无法执行
  5. CRITICAL 发生了严重的错误,程序将无法继续执行下去

logging默认级别为WARNING

一个简单的例子

下面是一个非常简单的例子
> import logging
> logging.warning("Watch out!") # 将打印到命令行
> logging.info("I told you so") # 不会打印任何东西
上面代码将输出
> WARNING:root:Watch out!
因为logging默认级别为WARNING,所以INFO信息没被打印,root部分后面会解释

logging输出到文件

常见的应用场景是将日志输出到文件,下面代码请确保在一个新打开python解释器中运行,不要使用运行过上面例子的那个解释器
> import logging
> logging.basicConfig(filename="example.log", level=logging.DEBUG)
> logging.debug("This message should go to the log file")
> logging.info("So should this")
> logging.warning("And this, too")
打开example.log将看见
> DEBUG:root:This message should go to the log file
> INFO:root:So should this
> WARNING:root:And this, too
因为将logging的级别设置为了DEBUG,所以所有的信息都存入了文件
对日志文件的操作默认是追加,可以通过filemode设置为其它
> logging.basicConfig(filename="example.log", filemode="w", level=logging.DEBUG)
设置为写模式,每次执行,之前的日志被覆盖

记录变量数据

要记录一个变量数据可以使用格式化字符串
> import logging
> logging.warning("%s before you %", "Look", "leap!")
将显示
> WARNING:root:Look before you leap!

改变要展示的信息的格式

可以自定义要输出的信息的格式
> import logging
> logging.basicConfig(format="%(levelname)s:%(message)s", level=logging.DEBUG)
> logging.debug("This message should appear on the console")
> logging.info("So should this")
> logging.warning("And this, too")
打印出来的消息为
> DEBUG:This message should appear on the console
> INFO:So should this
> WARNING:And this, too
可以看见之前打印出来的root不见了,更多的格式字符串见https://docs.python.org/2/library/logging.html#logrecord-attributes

  • Logger提供程序使用的接口
  • Handlers将loggers产生的信息发送到合适的目的地
  • Filters选择哪些信息输出
  • Formatters指定输出日志的格式
    Log事件在一个LogRecord实例中通过loggers,handlers,filters和formatters处理

一个使用logger的惯例是每个模块使用一个logger
> logger = logging.getLogger(name)
这意味着logger名字服从了package/module的层级结构,而且可以很直观的通过logger的名字判断事件是在什么地方被记录的

根logger

posted @ 2014-10-16 22:46  LOTUS2014  阅读(448)  评论(0编辑  收藏  举报