将用户ip和用户id添加到flask应用程序中的日志文件中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将用户ip和用户id添加到flask应用程序中的日志文件中相关的知识,希望对你有一定的参考价值。

我使用标准的Python日志包在Flask应用程序中编写日志文件。我想添加用户IP地址,如果用户通过身份验证,我还想记录用户ID。有人知道怎么做这个吗?现在我的格式化工具看起来像这样

fmt = ('%(asctime)s - %(name)s - %(levelname)s - '
       '%(filename)s:%(lineno)s - %(funcName)20s() - %(message)s')
formatter = logging.Formatter(fmt)
答案

好的,我设法通过添加自定义过滤器来实现

class ContextualFilter(logging.Filter):
    def filter(self, log_record):
        ''' Provide some extra variables to give our logs some better info '''
        log_record.utcnow = datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S,%f %Z')
        log_record.url = request.path
        log_record.method = request.method
        # Try to get the IP address of the user through reverse proxy
        log_record.ip = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
        if current_user.is_anonymous():
            log_record.user_id = 'guest'
        else:
            log_record.user_id = current_user.get_id()
        return True

可以添加到记录器中

std_logger.addFilter(ContextualFilter())

格式化程序应该是类似的东西

    fmt = ('%(utcnow)s - %(levelname)s - '
       'user_id:%(user_id)s - ip:%(ip)s - %(method)s - %(url)s - '
       '%(filename)s:%(lineno)s - %(funcName)20s() - %(message)s')

以上是关于将用户ip和用户id添加到flask应用程序中的日志文件中的主要内容,如果未能解决你的问题,请参考以下文章

Flask-SQLAlchemy:用户角色模型和关系

Flask-Admin权限,用于添加具有特定角色的用户

如何将 LDAP AD 组映射到 python flask AppBuilder 中的用户角色

11.flask博客项目实战六之用户个人资料

从 SQLalchemy Flask 中的连接表返回填充字段

Flask-auth、Principal 和 Flask Security [关闭]