django - Django 将环境值传递给 Logstash
问题描述
加入了一个已经有书面记录器的项目。为了方便过滤,需要在logger的任何消息前加上环境值的传递。
我怎么能这样做?
设置:
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,
},
},
}
解决方案
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,包括添加额外的属性,这些属性可以使用合适的格式字符串输出,或者如果需要自定义 Formatter。
这两部分都提供了示例代码。
推荐阅读
- tsql - sql代码比较系列中的前一行
- vba - 在 PST 存储中隐藏搜索文件夹
- r - 将单元格内容分成R中的新行
- c - strcasecmp 算法有缺陷吗?
- scala - 如何基于 Spark/Scala 中所有列的过滤条件创建 DF
- r - 使用 .SD 对 data.table 中的列子集进行累积总和
- java - 复杂的 sql 查询应该发生在后端还是在 android mobile 中安全
- mongodb - Mongo Express 服务器监听 http://0.0.0.0:8081
- javascript - react中的分页类组件
- cassandra - 连接错误: ('无法连接到任何服务器', {'127.0.0.1': error(111, "尝试连接到 [('127.0.0.1