【问题标题】:Adding client IP info into django logger将客户端 IP 信息添加到 django 记录器中
【发布时间】:2012-08-24 15:28:36
【问题描述】:

我正在尝试将客户端 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)

【问题讨论】:

  • 试试 django_requestlogging 这个包是你必备的,链接pypi.org/project/django-requestlogging
  • django-requestlogging 坏了,github 有七个版本,python3 和 django 都没有>=2

标签: django logging ip


【解决方案1】:

好的,在阅读了一些 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)

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

logger.info('message', request)

【讨论】:

  • 你在 settings.py 中定义自定义类?
  • 你指定什么格式来使用 ip 记录? '格式': '%(levelname)s %(asctime)s %(ip)s %(message)s', ?
猜你喜欢
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2015-05-02
  • 1970-01-01
  • 2019-01-01
  • 2021-04-16
相关资源
最近更新 更多