将日志记录信息添加到App Engine中的每个请求

时间:2020-07-15 13:41:16

标签: python google-app-engine logging

作为安全审查的一部分,客户要求我们将日志记录信息添加到我们网站的每个请求中。例如,在Python / Flask应用程序中,我可以这样做:

@app.before_request
def log_stuff():
    logging.info('something really important')

这可能是一个愚蠢的问题,但这样做会大大增加GAE的运营成本。我怀疑不是,但是想确保我没有错过任何东西。

2 个答案:

答案 0 :(得分:1)

您可能需要更多空间,具体取决于日志消息的范围,要存储的日志数量以及流量。但是,由于1 GB的费用远远少于每月1美元,因此您应该不会看到GAE费用有明显增加。

您只需编写示例日志消息并计算,预期的请求数量将需要多少空间,以及该请求将存储多长时间。 但这不会产生太大影响。这不是复杂的操作,您唯一需要考虑的就是另外可能需要的磁盘空间。

答案 1 :(得分:1)

creolo的答案是正确的,但我会添加一些...

您可能希望添加一些逻辑以仅记录外部请求,或对内部记录进行特殊记录。像这样:

@app.before_request
def before_request():
    # if you want to stop checking when in dev:
    if app.config["DEBUG"]:
        return None
        
    if request.headers.get('User-Agent', 'na').startswith('AppEngine-Google'):
        ...
    if request.path.startswith('/admin/'):
        ...
    if current_user.is_active:
        ...
    if current_user.is_superuser:
        ...

    return None

此外,如果空间成为问题,则可以通过自定义日志记录配置以缩短它来节省很少的磁盘空间,或者仅使用print()语句:

import logging

LOGGING_FORMAT      = '%(levelname).1s %(message).25s'
LOGGING_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'    #,%(msecs)d
LOGGING_LEVEL       = logging.DEBUG

logging.basicConfig(format=LOGGING_FORMAT, datefmt=LOGGING_DATE_FORMAT, level=LOGGING_LEVEL)

更多信息:https://docs.python.org/3/howto/logging.html#changing-the-format-of-displayed-messages