POSTS
Python Logging Basic Tutorial
Python的logging包提供了日志功能。
诊断日志 记录与应用程序操作相关的日志。例如,用户遇到的报错信息, 可通过搜索诊断日志获得上下文信息。
审计日志 为商业分析而记录的日志。从审计日志中,可提取用户的交易信息, 并结合其他用户资料构成用户报告或者用来优化商业目标。
下面介绍其基本使用方法。 logging记录的日志是分级别的。按照严重程度从低到高排列为 DEBUG , INFO , WARNING , ERROR , CRITICAL 。 下表展示了各级别日志的用途。
级别 | 用途 |
---|---|
DEBUG | 用于诊断程序时。 |
INFO | 确认工作如预期一样进行。 |
WARNING | 提醒未预料到的事情发生,或者将要发生什么问题。程序还是会正常运行下去。 |
ERROR | 由于某个严重的问题,程序不能执行某些函数。 |
CRITICAL | 程序出错,不能继续运行下去。 |
logging输出的级别默认为 WARNING 。
一个最简单的例子
import logging
logging.warning("将会输出")
logging.info("这条不会显示") # 因为默认级别是 WARNING
WARNING:root:将会输出
下面这个例子通过logging.basicConfig
函数配置logging的日志文件和级别。
import logging
logging.basicConfig(filename='example.log', level=logging.DEBUG)
logging.debug('这条信息会显示到example.log')
logging.info('这条也是')
logging.warning('这条同样')
logging.critical('同样显示')
logging.info('也会显示')
append
,可以通过给logging.basicConfig
传入filemode
参数控制。
例如,
logging.basicConfig(filename='example.log', filemode='w')
如果代码包含其他模块,而其他模块也需要logging,下面的方法可以供以参考。
# main program
import logging
import mylib
def main():
logging.basicConfig(level=logging.INFO)
logging.info('Started')
mylib.do_something()
logging.info('Finished')
if __name__ == 'main':
main()
# mylib.py
import logging
def do_something():
logging.info('Doing something')
INFO:root:Started
INFO:root:Doing something
INFO:root:Finished
通过给logging.basicConfig
传入format
参数可以改变日志信息的格式。
例如,
import logging
logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s', level=logging.DEBUG)
logging.debug('hello, debug!')
2018-03-04 19:53:35,697 DEBUG: hello, debug!
其中的asctime
可以通过传入datefmt
参数进一步控制时间的显示。其格式和time.strftime()的一样。
例如,
import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('is when this event was logged.')
03/04/2018 07:56:36 PM is when this event was logged.
总结
- import logging
- logging.basicConfig() 配置logging
- Args
- filename: 日志文件路径,默认为
sys.stderr
。 - filemode: 文件写入模式,
{'w', 'a'}
。 - level: 日志级别,按严重程度从低到高为 DEBUG , INFO , WARNING , ERROR , CRITICAL 。默认为
logging.WARNING
。 - format: 记录输出格式,可定制的几个基本对象是
- asctime: 适合人阅读的时间格式。
- levelname: 记录级别。
- message: 具体记录信息。
- datefmt: 控制
asctime
的输出格式,例如'%m/%d/%Y %I:%M:%S %p'
。其格式和time.strftime()的一样。