将客户端IP信息添加到django logger中

Jam*_*Lin 3 django ip logging

我正在尝试将客户端IP添加到日志文件中,我考虑过扩展Logger,但不确定如何访问请求对象并将IP放入记录对象

from logging.handlers import RotatingFileHandler

class RequestRotatingFileLogger(RotatingFileHandler, object):
    def emit(self, record):
        """
        code to manipulate the record to add an attribute to have client IP
        record.ip = '123.123.123.123'
        """
        super(RequestRotatingFileLogger,self).emit(record)
Run Code Online (Sandbox Code Playgroud)

Jam*_*Lin 9

好了,在阅读了一些Logger源代码之后,我发现了一个hacky方法

from logging.handlers import RotatingFileHandler

class RequestRotatingFileLogger(RotatingFileHandler, object):
        def emit(self, record):
            record.ip = '0.0.0.0'
            try:
                request = record.args[0]
                record.ip = request.META.get('REMOTE_ADDR')  
                record.args = None
            except:
                pass

            super(RequestRotatingFileLogger,self).emit(record)
Run Code Online (Sandbox Code Playgroud)

并且在记录时,将请求对象作为第二个参数传递,例如.

logger.info('message', request)
Run Code Online (Sandbox Code Playgroud)

  • 以及您指定使用ip记录的格式是什么?'format':'%(levelname)s%(asctime)s%(ip)s%(message)s',? (2认同)