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

ElC*_*ine 7 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
Run Code Online (Sandbox Code Playgroud)

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

App = Flask(__name__)
api = Api(App)
api.add_resource(SomeEndpoint, '/', resource_class_kwargs={'logger': App.logger})
Run Code Online (Sandbox Code Playgroud)

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

非常感谢

Cam*_*llo 11

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

一、导入

from flask import current_app as app

在资源文件中,并在调用记录器时,请执行以下操作:

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

  • 这应该是公认的答案,因为它更干净(不要自己共享记录器!)并且更简单 (2认同)
  • @DanilaGanchar 是的,你是对的。那不是问题。也许我太有偏见了,因为对于我的情况来说,这是最干净、最简单的解决方案。 (2认同)

Dan*_*har 5

您需要定义Resource 的构造函数。这里有一个例子:

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')
})
Run Code Online (Sandbox Code Playgroud)

打开您的端点。你会看到my_custom_logger。希望这可以帮助。