Flask中的 logging 使用
程序员文章站
2022-05-12 10:42:19
...
一、日志等级说明
- 等级: DEBUG < INFO < WARNING < ERROR < CRITICAL
- DEBUG : 最详细的日志信息,主要的应用场景问题的诊断,只限于开发人员使用的,用来在开发过程中进行调试
- INFO : 详细程度仅次于debug模式,主要来记录关键节点的信息,确定程序是否正常如预期完成,一般的使用场景是重要的业务处理已经结束,我们通过这些INFO级别的日志信息,可以很快的了解应用正在做什么。
- WARNING : 当某些不被期望的事情发生的时候,需要记录的信息,比如磁盘即将存满,注意当前的程序一依旧可以正常运行,不报错。也就是说发生这个级别的问题时,处理过程可以继续,但必须要对这个问题给予额外的关注。
- ERROR : 出现严重问题,导致某些功能不能正常运行记录信息
- CRITICAL: 系统即将崩溃或者已经崩溃
二、应用实例
2.1 简单使用demo
from flask import Flask
import logging
app = Flask(__name__)
@app.route('/')
def root():
app.logger.info('info log')
app.logger.warning('warning log')
return 'hello'
if __name__ == '__main__':
app.debug = True
handler = logging.FileHandler('flask.log')
app.logger.addHandler(handler)
app.run()
2.2 自定义设置打印格式(2+)
import logging.handlers
handler = logging.FileHandler('flask.log', encoding='UTF-8')
handler.setLevel(logging.DEBUG)
logging_format = logging.Formatter(
'%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
handler.setFormatter(logging_format)
app.logger.addHandler(handler)
import logging
from logging.handlers import RotatingFileHandler
# 默认日志等级的设置
logging.basicConfig(level=logging.DEBUG)
# 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限
file_log_handler = RotatingFileHandler('WarningLogs.log', maxBytes=1024 * 1024, backupCount=10)
# 设置日志的格式 发生时间 日志等级 日志信息文件名 函数名 行数 日志信息
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
# 将日志记录器指定日志的格式
file_log_handler.setFormatter(formatter)
# 日志等级的设置
# file_log_handler.setLevel(logging.WARNING)
# 为全局的日志工具对象添加日志记录器
logging.getLogger().addHandler(file_log_handler)
# 测试
app.logger.info('info log')
app.logger.debug('debug log')
app.logger.warning('warning log')
app.logger.error('error log')
app.logger.critical('critical')
2.3 自定义文件和格式设置
import os
import logging
import time
from logging.handlers import RotatingFileHandler
# log配置,实现日志自动按日期生成日志文件
def make_dir(make_dir_path):
path = make_dir_path.strip()
if not os.path.exists(path):
os.makedirs(path)
log_dir_name = "Logs"
log_file_name = 'logs-' + time.strftime('%Y-%m-%d', time.localtime(time.time())) + '.log'
log_file_folder = os.path.abspath(
os.path.join(os.path.dirname(__file__), os.pardir)) + os.sep + log_dir_name
make_dir(log_file_folder)
log_file_str = log_file_folder + os.sep + log_file_name
# 默认日志等级的设置
logging.basicConfig(level=logging.WARNING)
# 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限
file_log_handler = RotatingFileHandler(log_file_str, maxBytes=1024 * 1024, backupCount=10)
# 设置日志的格式 发生时间 日志等级 日志信息文件名 函数名 行数 日志信息
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
# 将日志记录器指定日志的格式
file_log_handler.setFormatter(formatter)
# 日志等级的设置
# file_log_handler.setLevel(logging.WARNING)
# 为全局的日志工具对象添加日志记录器
logging.getLogger().addHandler(file_log_handler)
三、使用体验
简单讲,logging的使用就是三个步骤:
- 创建记录器
- 日志的格式、等级设置
- 添加记录器
四、日志记录等级设置
如果是使用 logging.basicConfig(level=logging.DEBUG) 设置的话,那么使用 app.logger 打印的日志仍会不分等级均记录,而 系统运行日志 才会按照设置的等级进行记录。
使用 file_log_handler.setLevel(logging.WARNING) 设置等级的话,那么不管是 app.logger 打印的日志 还是 系统运行日志 均按照设置等级进行记录。
五、日志格式的常用参数说明
参数 | 说明 |
---|---|
%(name)s | Logger的名字 |
%(levelno)s | 数字形式的日志级别 |
%(levelname)s | 文本形式的日志级别 |
%(pathname)s | 调用日志输出函数的模块的完整路径名,可能没有 |
%(filename)s | 调用日志输出函数的模块的文件名 |
%(module)s | 调用日志输出函数的模块名 |
%(funcName)s | 调用日志输出函数的函数名 |
%(lineno)d | 调用日志输出函数的语句所在的代码行 |
%(created)f | 当前时间,用UNIX标准的表示时间的浮 点数表示 |
%(relativeCreated)d | 输出日志信息时的,自Logger创建以 来的毫秒数 |
%(asctime)s | 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 |
%(thread)d | 线程ID。可能没有 |
%(threadName)s | 线程名。可能没有 |
%(process)d | 进程ID。可能没有 |
%(message)s | 用户输出的消息 |
参考文章:【1】Flask-log,日志
【2】如何优雅的在flask中记录log
【3】python web开发-flask中日志的使用
【4】Flask使用日志记录到文件示例
【5】flask 日志集成
【6】Logging — Flask Documentation (1.1.x)
【7】logging.config — Logging configuration — Python 3.7.5rc1 documentation
【8】logging — Logging facility for Python — Python 3.7.5rc1 documentation
推荐阅读
-
PHP5中使用PDO连接数据库的方法
-
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
-
Word2000和Word2002中的宏在Office Word 2003中的使用
-
使用=号引用的方法来将Excel中多列内容合并成一列
-
MyBatis中XML和注解的对比及使用
-
Word2003“汉字重选”功能在文档中的使用
-
jquery中的$(document).ready()使用小结
-
Python_WIN10系统中递归所有文件夹所有文件_移动所有文件到主目录(使用到的库:os + glob + shutil)
-
Linux系统中的mount挂载磁盘命令使用教程
-
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析