Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将用户ip和用户id添加到flask应用程序中的日志文件_Python_Logging_Flask - Fatal编程技术网

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

Python 将用户ip和用户id添加到flask应用程序中的日志文件,python,logging,flask,Python,Logging,Flask,我正在使用标准Python日志包在Flask应用程序中编写日志文件。我想添加用户ip地址,如果用户经过身份验证,我还想记录用户id。有人知道怎么做吗? 现在我的格式化程序看起来像这样 fmt = ('%(asctime)s - %(name)s - %(levelname)s - ' '%(filename)s:%(lineno)s - %(funcName)20s() - %(message)s') formatter = logging.Formatter(fmt) 好的,我

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

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

好的,我可以通过添加一个costam过滤器来实现

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')

您是如何推送应用程序上下文的?当前\u用户来自何处?您可以使用会话获取当前\u用户: