【问题标题】:Python JSON log formatPython JSON 日志格式
【发布时间】:2021-12-01 19:18:22
【问题描述】:

我正在尝试使用如下所示的日志格式:

    {
      "DateTime" : "2021-12-01T20:49:55.798+02:00",
      "Level" : "INFO",
      "Body" : {
          "text" : "the log message ",
          "SensorID" : "46"
      }
    }

我使用了 python-json-logger,我的 json 看起来像这样:

  {
    "DateTime": "2021-12-01T19:08:03.599693Z", 
    "Level": "INFO",
    "message": "the log message",
    "body": "{
     sensorId :1"
    }
  }

我仍然不知道如何将消息放在正文中并将关键消息更改为文本...

到目前为止,我的代码如下所示

from pythonjsonlogger import jsonlogger
from json_logging import datetime

logger = logging.getLogger()

logHandler = logging.StreamHandler()
class CustomJsonFormatter(jsonlogger.JsonFormatter):
    def add_fields(self, log_record, record, message_dict):
        super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict)
        if not log_record.get('DateTime'):
            # this doesn't use record.created, so it is slightly off
            now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ')
            log_record['DateTime'] = now
        if log_record.get('Level'):
            log_record['Level'] = log_record['level'].upper()
        else:
            log_record['Level'] = record.levelname

formatter = CustomJsonFormatter('%(DateTime)s %(Level)s %(message)s')

logHandler.setFormatter(formatter)
logger.addHandler(logHandler)
logger.setLevel(logging.INFO)
y = "{sensorId :" + str(1)
logger.info("the log message"  , extra={"body" : y} ) 





                       

【问题讨论】:

  • 第二个 JSON 无效,它有一个不匹配的 }
  • 哦,我刚刚注意到......你有什么建议如何匹配python代码中的jsons吗?
  • 你忘记在 y = "{sensorId :" + str(1) + "}" 中关闭 }

标签: python json logging


【解决方案1】:

这有帮助吗?

from pythonjsonlogger import jsonlogger
from datetime import datetime
import logging
import json


logger = logging.getLogger()

logHandler = logging.StreamHandler()
class CustomJsonFormatter(jsonlogger.JsonFormatter):
    def add_fields(self, log_record, record, message_dict):
        super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict)
        if not log_record.get('DateTime'):
            # this doesn't use record.created, so it is slightly off
            now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ')
            log_record['DateTime'] = now
        if log_record.get('Level'):
            log_record['Level'] = log_record['level'].upper()
        else:
            log_record['Level'] = record.levelname

formatter = CustomJsonFormatter('%(DateTime)s %(Level)s')

logHandler.setFormatter(formatter)
logger.addHandler(logHandler)
logger.setLevel(logging.INFO)
msg = "the log message"
logger.info({"body":{"text":msg, "sensorId":1}})

打印出来:

{'DateTime': '2021-12-28T23:03:38.363401Z',
 'Level': 'INFO',
 'body': {'text': 'the log message', 'sensorId': 1}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多