Python学习之 logging模块的使用

本文和大家分享的主要是Python logging模块相关内容,一起来看看吧,希望对大家 学习python 有所帮助。
  记录日志是追踪事件的一种手段。通过添加日志,开发者可以清楚地了解发生了哪些事件,包括出现了哪些错误。logging 模块提供了一系列便捷的函数,用于简单的日志记录。它们分别是 debug() , info() , warning() , error() 和 critical() 。
  简单示例
  下面是一个非常简单的示例:
  import logging
  logging.warning('Watch out!')   # 打印一条信息到命令行
  logging.info('I told you so')   # 不会打印任何东西
  如果你运行着几行代码,你会看到命令行中输出以下内容:
  WARNING:root:Watch out!
  由于 logging 模块默认的级别为 WARNING ,因此 INFO 级别的日志不会被打印出来。输出的日志包含了级别和事件的描述。 root 为默认 logger 的名字,我们可以手动更改它,并且自定义日志的输出格式。
  记录日志到文件
  很多情况下,我们会把日志记录到文件中,接下来我们就来看看具体的操作。请重新打开一个 python 解释器,而不要直接使用上述例子所用的解释器,确保 logging 模块能够被正确配置。
  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
  这个例子告诉你如何设定日志级别,从而控制要记录的日志。由于我们在这个例子中设定的级别是 DEBUG ,因此所有的日志都会被记录下来。
  多个模块记录日志
  如果你的程序包含了多个模块,这里有一个例子向你展示了如何组织它们的日志输出:
  # myapp.pyimport logging  import mylib
  def main():
  logging.basicConfig(filename='myapp.log', level=logging.INFO)
  logging.info('Started')
  mylib.do_something()
  logging.info('Finished')
  if __name__ == '__main__':
  main()
  # mylib.pyimport logging
  def do_something():
  logging.info('Doing something')
  如果你运行 myapp.py 文件,你会在 myapp.log 文件中看到以下内容:
  INFO:root:Started  INFO:root oing something  INFO:root:Finished
  记录变量的数据
  要记录变量的数据,可以使用一个格式串来格式化输出,并将变量作为参数传递给日志记录函数。
  import logging
  logging.warning('%s before you %s', 'Look', 'leap!')
  输出内容:
  WARNING:root ook before you leap!
  你也可以使用 python 自带的字符串格式化函数:
  import logging
  logging.warning('{} before you {}'.format('Look', '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 在这里已经消失了。要了解所有能出现在格式串里的东西,请参考 LogRecord attributes 。但如果只是简单使用,你只需要 levelname (级别)、 message (事件描述,包括变量数据)以及事件发生的时间,这点将在下面讲解。
  记录日期和时间
  要在日志中显示日期和时间,你需要在格式串中加入 %(asctime)s :
  import logging  logging.basicConfig(format='%(asctime)s %(message)s')  logging.warning('is when this event was logged.')
  输出如下:
  2010-12-12 11:41:42,612 is when this event was logged.
  格式串中的时间格式参数与 time.strftime() 中支持的参数相同。
  Logging 进阶指南
  logging 模块采取了模块化的方式并提供了几个组件的类别:logger、handler、filter、formatter。
  · logger 提供了代码中直接使用的接口
  · handler 用于向目的地发送日志记录
  · filter 用于过滤特定的日志记录
  · formatter 指定了日志记录最终的输出样式
  日志事件信息在一个 LogRecord 实例中的 logger、handler、filter 和 formatter 之间传递。
  一个给 logger 命名的好习惯是使用模块级别的 logger。在每一个需要记录日志的模块内使用以下方式来给 logger 命名:
  logger = logging.getLogger(__name__)
  这种情况下,logger 的名字会追踪包/模块的层次结构,并且我们可以直观地看到事件是由哪个模块记录的。
  层次结构中最顶级的 logger 称为 root logger。当我们调用 logging 模块的 debug() , info() ,warning() , error() 和 critical() 函数时,会使用 root logger 对应的同名方法。这些函数与 root logger 中的同名方法具有相同的参数签名。root logger 在输出时名字为 root 。
  当然,我们也可以将信息记录到不同的目的地。我们可以将日志记录到文件、HTTP GET/POST 位置、邮件(通过 SMTP)、普通套接字或系统专用的日志机制,例如 syslog 或 Windows NT 事件日志。目的地由 handler 类进行处理。如果内置的 handler 类没有满足你的要求,你可以创建一个自己的日志目的地类。
  默认情况下,不会给日志信息设定目的地。你可以使用 basicConfig() 来指定目的地,正如之前所给的例子一样。如果你调用了 debug() , info() , warning() , error() 和 critical() 函数,它们会检查是否设定了目的地,如果未设定目的地,则默认使用命令行(sys.stderr)作为目的地,并使用默认的格式来显示信息。
  basicConfig() 函数默认的格式为:
  severity:logger name:message
  你可以通过传递一个格式串以及格式参数给 basicConfig() 来改变输出格式。

来源:代码信条
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值