首页 > 其他分享 >flask 框架日志

flask 框架日志

时间:2024-07-31 11:17:54浏览次数:6  
标签:02 15 框架 flask app handler threadId 日志 logger

 

  除了自定义配置的log日志外,flask框架的有自己的日志处理机制,使用它的好处就是出现异常,即使没有捕获也能打印到日志里,方便定位问题。

import sys
from logging.handlers import TimedRotatingFileHandler
from logging import StreamHandler
from logging import Formatter

app = Flask(__name__)
def LoggerLoad(app):
    LogPath = './log/test/'
    app.logger = logging.getLogger("root")
    #设置收集的日志等级
    app.logger.setLevel(logging.INFO)
    # 配置日志格式
    formatter = Formatter(" %(asctime)s threadId-%(thread)d %(levelname)s %(module)s %(funcName)s %(message)s")
    # 定义控制台输出
    handler = StreamHandler(sys.stderr)
    handler.setFormatter(formatter)
    os.makedirs(LogPath, exist_ok=True)
    # 配置TimedRotatingFileHandler保留策略
    time_handler = TimedRotatingFileHandler(f'{LogPath}/main.log',
                                               when="midnight",
                                               interval=1,
                                               backupCount=20,
                                               encoding='utf-8')
    time_handler.setFormatter(formatter)
    # 可以单独给每个handler设置日志等级,上面已统一设置过
    # time_handler.setLevel(logging.INFO)
    # add输出控制台handler
    app.logger.addHandler(handler)
    # add自定义文件输出handler
    app.logger.addHandler(time_handler)

LoggerLoad(app)
app.logger.info('This is info')
app.logger.warning('This is warning')
app.logger.error('This is error')

@app.route('/')
def index():
    app.logger('')
    # 制造一个错误
    return None

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000 ,debug=True)

输出:

 

2024-02-02 15:49:55,411 threadId-5332 INFO app <module> This is info
 2024-02-02 15:49:55,412 threadId-5332 WARNING app <module> This is warning
 2024-02-02 15:49:55,412 threadId-5332 ERROR app <module> This is error
 2024-02-02 15:49:55,427 threadId-5332 INFO _internal _log WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
 2024-02-02 15:49:55,427 threadId-5332 INFO _internal _log Press CTRL+C to quit
 2024-02-02 15:50:11,428 threadId-9920 ERROR app log_exception Exception on / [GET]
Traceback (most recent call last):
  File "C:\Users\shenhao\AppData\Local\pypoetry\Cache\virtualenvs\flaskproject1-_AJUdV2B-py3.10\lib\site-packages\flask\app.py", line 1455, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\shenhao\AppData\Local\pypoetry\Cache\virtualenvs\flaskproject1-_AJUdV2B-py3.10\lib\site-packages\flask\app.py", line 869, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\shenhao\AppData\Local\pypoetry\Cache\virtualenvs\flaskproject1-_AJUdV2B-py3.10\lib\site-packages\flask\app.py", line 867, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\shenhao\AppData\Local\pypoetry\Cache\virtualenvs\flaskproject1-_AJUdV2B-py3.10\lib\site-packages\flask\app.py", line 852, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "C:\Users\shenhao\PycharmProjects\flaskProject1\app.py", line 75, in index
    app.logger('')
TypeError: 'RootLogger' object is not callable
 2024-02-02 15:50:11,432 threadId-9920 INFO _internal _log 127.0.0.1 - - [02/Feb/2024 15:50:11] "GET / HTTP/1.1" 500 -

 

如果是在视图函数,可直接通过 current_app.logger.info() 方法调用。非视图函数没有上下文关系,需要先 with app.app_context() ,再调用 current_app.logger.info() 。

 

标签:02,15,框架,flask,app,handler,threadId,日志,logger
From: https://www.cnblogs.com/shenh/p/18003361

相关文章

  • 如何匹配Flask中的所有路由?
    我想匹配所有路由并处理Flask中所有收到的HTTP请求。代码如下:fromflaskimportFlaskfromflaskimportrequestapp=Flask(__name__)@app.route('/<path:full_path>',methods=['GET','PUT','DELETE','POST'])defcatch_a......
  • Qt程序中的日志记录Log4Qt
    一.为啥使用log4Qt?    1.与log4cpp的用法相似,支持配置文件。    2.可以输出qDebug(),qInfo()等等Qt自带的打印信息。二.工程地址MEONMedical/Log4Qt:Log4Qt-LoggingfortheQtcross-platformapplicationframework(github.com)        编译......
  • PHP框架中用户认证和授权的实现方法与示例
    本文由ChatMoney团队出品在Web开发中,用户认证(Authentication)和授权(Authorization)是构建安全应用程序的核心组件。用户认证是验证用户身份的过程,确保用户是他们声称的那个人。而授权则是确定已认证用户是否有权访问特定资源或执行特定操作的过程。PHP框架通过提供内置机制或集......
  • 1、.Net UI框架:WPF - .Net宣传系列文章
    WPF(WindowsPresentationFoundation)是微软提供的一个用于构建Windows应用程序的UI框架,它是.NETFramework的一部分,并且也支持.NETCore和.NET5/6等后续版本。WPF以其强大的数据绑定、样式化和图形功能而闻名,非常适合开发具有丰富视觉效果的现代应用程序。主要特点:分......
  • 计算机毕业设计django/flask+uniapp私人定制商品订单系统hbuiderx微信小程序
    私人订制订单发布与对应商品出售平台方面的任务繁琐,以至于每年都在私人订制订单发布与对应商品出售平台这方面投入较多的精力却效果甚微,私人订制订单发布与对应商品出售平台的目标就是为了能够缓解私人订制订单发布与对应商品出售平台管理面临的压力,让私人订制订单发布与对......
  • 1、.Net UI框架:Winfroms - .Net宣传系列文章
    WindowsForms(简称WinForms)是微软.NETFramework的一部分,它是一个用于构建Windows应用程序的UI框架。WinForms提供了丰富的控件和功能,允许开发者使用拖放的方式快速构建用户界面,并使用C#或VB.NET等.NET语言编写应用程序的逻辑。主要特点:可视化设计:WinForms提供了一个......
  • [附开题]flask框架的汽车零件维修管理信息平台t6rr1(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着汽车工业的快速发展和汽车保有量的持续增长,汽车零件维修管理已成为汽车后市场的重要组成部分。传统的手工记录和管理方式已难以满足现......
  • [附开题]flask框架的汽车售后管理系统2888o(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着汽车产业的快速发展和消费者购车需求的日益增长,汽车售后服务已成为车企和经销商提升客户满意度、增强品牌忠诚度的重要环节。然而,传统......
  • [附开题]flask框架的社区服务管理系统0f6i9(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的深入和居民生活水平的提高,社区服务需求日益多样化与复杂化。传统的社区服务模式已难以满足居民对于高效、便捷、个性化服......
  • [附开题]flask框架的社区服务系统ff00q(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会的快速发展和居民生活水平的提高,社区作为城市的基本单元,其服务功能日益丰富和多样化。然而,传统社区服务方式在应对日益增长的居民......