【问题标题】:Adding logging info to every request in App Engine将日志信息添加到 App Engine 中的每个请求
【发布时间】:2020-11-05 00:49:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: python google-app-engine logging


    【解决方案1】:

    您可能需要更多空间,具体取决于您的日志消息的范围、您要存储的日志数量以及您的流量有多高。但由于 1 GB 远低于每月 1 美元,因此您的 GAE 成本不会显着增加。

    您可以编写一个示例日志消息并计算预期请求数量需要多少空间以及存储多长时间。 但这不应该有什么大的影响。这不是复杂的操作,您唯一应该考虑的是您可能需要额外的磁盘空间。

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

      • 为避免空间问题,您还可以考虑压缩日志文件。这可以保护您高达 90% 的空间。因为我们对登录处理程序中的 python 构建不满意,所以我们编写了自己的处理程序来直接压缩日志,这可以为您节省大量空间。我们今天刚上传到pypi,叫compressedlogger。对不起这个广告',也许这很有用
      猜你喜欢
      • 2020-06-26
      • 1970-01-01
      • 2018-11-25
      • 2021-02-25
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      相关资源
      最近更新 更多