Django将环境值传递给Logstash

时间:2019-12-09 13:13:19

标签: django

加入了一个已经有书面记录器的项目。为了便于过滤,有必要在记录器的任何消息之前添加环境值的传输。

Expected result

Now

我该怎么做?

设置:

APP_ENV = os.getenv("APP_ENV")

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
    'verbose': {
        'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
    },
    'simple': {
        'format': '%(levelname)s %(message)s'
    },
},
'handlers': {
    'graypy': {
        'level': 'INFO',
        'class': 'graypy.GELFHandler',
        'host': 'logstash...',
        'port': 12222,
    },
    'console': {
        'level': 'INFO',
        'class': 'logging.StreamHandler',
        'formatter': 'simple',
    },
},
'loggers': {
    'django': {
        'handlers': ['graypy', 'console'],
        'level': 'WARNING'
    },
    'mts_marketplace': {
        'handlers': ['graypy', 'console'],
        'level': 'INFO',
        'propagate': True,
    },
    'mts_marketplace.processing': {
        'handlers': ['graypy', 'console'],
        'level': 'INFO',
        'propagate': False,
    },
    'mts_marketplace.internal_api': {
        'handlers': ['graypy', 'console'],
        'level': 'INFO',
        'propagate': False,
    },
    'mts_marketplace.trustedgoods': {
        'handlers': ['graypy', 'console'],
        'level': 'INFO',
        'propagate': False,
    },
    'mts_marketplace.fka': {
        'handlers': ['graypy', 'console'],
        'level': 'INFO',
        'propagate': False,
    },
  },
}

1 个答案:

答案 0 :(得分:0)

Django使用Python的日志记录机制,因此该部分也适用于Django: https://docs.python.org/3/howto/logging-cookbook.html#using-loggeradapters-to-impart-contextual-information

  

使用LoggerAdapters传递上下文信息

     

一种简单的方式,您可以传递上下文信息进行输出   连同记录事件信息一起使用LoggerAdapter   类。此类的设计类似于Logger,因此您可以   调用debug(),info(),warning(),error(),exception(),critical()和   log()。这些方法与它们的对应方法具有相同的签名   Logger,因此您可以互换使用两种类型的实例。

或者,如@dirkgroten所建议的:

https://docs.python.org/3/howto/logging-cookbook.html#using-filters-to-impart-contextual-information

  

使用过滤器传递上下文信息

     

您还可以使用以下命令将上下文信息添加到日志输出中   用户定义的过滤器。允许过滤器实例修改   传递给他们的LogRecords,包括添加其他属性   然后可以使用适当的格式字符串将其输出,或者在需要时输出   自定义格式化程序。

两个部分均提供示例代码。