5

クライアント 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)
4

1 に答える 1

10

OK、ロガーのソースコードを読んだ後、私はそれを行うためのハッキーな方法を見つけました

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)

ロギングするときは、リクエストオブジェクトを2番目のパラメータとして渡します。

logger.info('message', request)
于 2012-08-30T00:35:06.267 に答える