在Flask-Restful的资源中访问API记录器

时间:2018-03-01 15:59:54

标签: python rest flask

我目前正在使用flask-restful(http://flask-restful.readthedocs.io/en/0.3.5/index.html)将资源部署为端点,我想知道是否有办法从当时的资源类中访问API记录器。我已经浏览了文档,无法找到合适的答案。

基本上我想这样做:

from flask_restful import Resource 

class SomeEndpoint(Resource):

    def get(self):

        try:

            ... something throws an exception

        except SomeException as se:

            ... send custom message to API logger         <----- Here!

        return response

我做的是通过资源的构造函数从API传递记录器,如下所示:

App = Flask(__name__)
api = Api(App)
api.add_resource(SomeEndpoint, '/', resource_class_kwargs={'logger': App.logger})

这是访问flask-restful资源端点内的记录器的最合适方式吗?

非常感谢

3 个答案:

答案 0 :(得分:2)

您需要定义资源的constructor。这是一个例子:

import logging


class SomeEndpoint(Resource):

    def __init__(self, **kwargs):
        self.logger = kwargs.get('logger')

    def get(self):
        # self.logger - 'logger' from resource_class_kwargs
        return self.logger.name  

api.add_resource(SomeEndpoint, '/', resource_class_kwargs={
    # any logger here...
    'logger': logging.getLogger('my_custom_logger')
})

打开您的终端。您会看到my_custom_logger。 希望这会有所帮助。

答案 1 :(得分:1)

我知道已经选择了答案,但是也有一种略有不同的方法。

首先,导入

from flask import current_app as app

在资源文件中,并在调用记录器时执行:

app.logger.info("This is an info message")

答案 2 :(得分:0)

设置debug = False可以暂时解决此问题。

但是我真的不知道当debug设置为True时是什么问题