python日志

Python logging 模块定义了为应用程序和库实现灵活的事件日志记录的函数和类。

日志记录函数以它们用来跟踪的事件的级别或严重性命名。下面描述了标准级别及其适用性(从高到低的顺序):

critical > error > warning > info > debug

级别越高打印的日志越少,反之亦然,即

  • debug:打印全部的日志( notset 等同于 debug )
  • info:打印 info, warning, error, critical 级别的日志
  • warning:打印 warning, error, critical 级别的日志
  • error:打印 error, critical 级别的日志
  • critical:打印 critical 级别

开发应用程序时,可以使用 DEBUG 或 INFO 级别的日志获取尽可能详细的日志信息来进行开发或部署调试;

应用上线或部署生产环境时,应该使用 WARNING 或 ERROR 或 CRITICAL 级别的日志来降低机器的 I/O 压力和提高获取错误日志信息的效率。

日志的级别可以通过 logging.basicConfig() 设置。

logging 模块的介绍
  1. loggers 提供应用程序代码直接使用的接口
  2. handlers 用于将日志记录发送到指定的目的位置
  3. filters 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)
  4. formatters 用于控制日志信息的最终输出格式

新建 logs.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import logging
from logging.handlers import RotatingFileHandler


def setup_log():
"""配置日志"""

# 设置日志的记录等级
logging.basicConfig(level=logging.DEBUG) # 调试debug级
# 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限
file_log_handler = RotatingFileHandler("logs/app.log", maxBytes=1024 * 1024 * 100, backupCount=5)
# 创建日志记录的格式 日志等级 输入日志信息的文件名 行数 日志信息
formatter = logging.Formatter('%(levelname)s %(filename)s: %(lineno)d %(message)s')
# 为刚创建的日志记录器设置日志记录格式
file_log_handler.setFormatter(formatter)
# 为全局的日志工具对象(flask app使用的)添加日志记录器
logging.getLogger().addHandler(file_log_handler)

app.py:

1
2
3
4
from logs import setup_log

if __name__ == '__main__':
setup_log()

使用

1
2
3
4
5
6
from flask import current_app

@app.route('/')
def main():
current_app.logger.info('hello world')
return ""

日志打印内容为:

1
INFO views.py: 40 hello world