Python, как настроить форматирование журнала для jsonPayload

# #python #python-3.x #google-cloud-logging

Вопрос:

Я пытаюсь записать журнал данных в формате JSON в облачный журнал из Google cloud run. но когда я проверяю свой журнал в облачном журнале, мой журнал данных находится в поле сообщения в jsonPayload в виде строки.

Нравится,

 jsonPayload: {
  message: "{"test": "testing"}"
  python_logger: "cloudLogger"
}
 

но, чего я ожидал,

 jsonPayload: {
  test: "testing"
}
 

Это код, который я пробовал,

 client = google.cloud.logging.Client()
handler = CloudLoggingHandler(client, name="test")
cloud_logger = logging.getLogger('cloudLogger')
cloud_logger.setLvel(logging.INFO)
cloud_logger.addHandler(handler)
cloud_logger.info(json.dumps({"test": "testing"})
 

Для изменения формата jsonPayload, я думаю, мне, возможно, потребуется установить форматер, и я попробовал несколько образцов из Интернета, но безуспешно.

Как я могу сделать так, чтобы jsonPayload отображал именно мои данные в формате JSON?

Комментарии:

1. Похоже, что google cloud logging(python) не поддерживает данные журнала в формате Json?

Ответ №1:

В облачном ведении журнала структурированные журналы мы можем ссылаться на записи журнала, которые используют поле jsonPayload для добавления структуры в свои полезные нагрузки.

У нас есть различные методы преобразования ваших полезных данных в формат JSON:

  1. Когда вы используете Облачный агент ведения журнала для получения записей в журнале, вы можете указать, что агент ведения журнала преобразует ваши полезные данные в формат JSON.

Мы должны установить агент ведения журнала,чтобы включить структурированное ведение журнала, вы должны изменить конфигурацию агента ведения журнала по умолчанию при его установке или переустановке. Включение структурированного ведения журнала заменяет ранее перечисленные файлы конфигурации. В работе самого агента нет никаких изменений.

  1. Вы можете использовать API облачного ведения журнала или инструмент командной строки gcloud, вы можете управлять структурой ваших полезных нагрузок. Примеры см. в разделе Написание структурированных журналов.

Вы можете записывать структурированные журналы в журнал следующими способами:

  • Отправьте полную структуру входа в систему с помощью jsonPayload в облачный API ведения журнала
  • Предоставьте сериализованные объекты JSON агенту ведения журнала

При включении структурированного ведения журнала перечисленные журналы преобразуются в записи журнала в форматах, отличных от тех, которые были до включения структурированных журналов.

Пожалуйста, проверьте Структурированное ведение журнала для получения более подробной информации.

  1. Вы можете использовать службу BindPlane для приема журналов, тогда ваши полезные данные будут в формате JSON и структурированы в соответствии с исходной системой.

Также вы можете проверить Форматирование журналов Python для Stackdriver.

Комментарии:

1. Спасибо, что я мог бы сделать с 2. logger.log_struct().

Ответ №2:

Была аналогичная проблема с облачными функциями. Я использовал python3.7 , использовал несколько клиентских библиотек ведения журнала, и stackdriver все еще показывал его в виде текста, поскольку python печатал его в строковом формате.

В итоге я обновил python до v3.8 , это решило проблему.

Комментарии:

1. Я тестирую с python:3.9-тонкое изображение