[PYTHON] Behandeln Sie strukturierte Protokolle mit GCP Cloud Logging

Was ist ein strukturiertes Protokoll?

Eine Protokollausgabe in einem Datenformat wie JSON (siehe unten). GCP analysiert automatisch JSON-formatierte Protokolle zur Verwendung in Suchanfragen, was praktisch ist. (Bestätigt in Cloud Run) Zeilenumbrüche werden auch als JSON maskiert, wodurch es einfacher ist, mehrzeilige Protokolle als Nebeneffekt zu behandeln.

{"level": "INFO", "message": "hello\nworld", "timestamp": "2020-07-01 00:00:00"}

Beispiel für die Ausgabe eines Protokolls in JSON in Python

In Python können Sie das Protokoll im JSON-Format ausgeben, indem Sie Ihren eigenen Formatierer im Logger festlegen.

$ python -V
Python 3.8.0

logger.py


import sys
import logging
import json
import traceback


class JsonFormatter(logging.Formatter):
  def format(self, log):
    return json.dumps({
      "level": log.levelname,
      "message": log.msg,
      "timestamp": self.formatTime(log, self.datefmt),
      "traceback": traceback.format_exc() if log.exc_info else []
    })
    

formatter = JsonFormatter(datefmt="%Y-%m-%d %H:%M:%S")

stream = logging.StreamHandler(stream=sys.stdout)
stream.setFormatter(formatter)

logger = logging.getLogger('your-logger-name')
logger.setLevel(logging.INFO)
logger.addHandler(stream)

Laden und verwenden Sie den Set Logger.

sample.py


from logger import logger


logger.info("hello\nworld")
logger.info({"foo": "foo", "boo": "boo"})

Das folgende Protokoll wird ausgegeben.

{"level": "INFO", "message": "hello\nworld", "timestamp": "2020-07-01 00:00:00", "traceback": []}
{"level": "INFO", "message": {"foo": "foo", "boo": "boo"}, "timestamp": "2020-07-01 00:00:00", "traceback": []}

Cloud Logging

Sie können über den Bildschirm GCP Cloud Logging-> Log Viewer suchen. Die Datenausgabe als Protokoll, wie unten gezeigt, wird in "jsonPayload" gespeichert, und der Schlüssel kann in der Abfrage angegeben werden.

resource.type="cloud_run_revision"
jsonPayload.level="INFO"
jsonPayload.message.foo="foo"

Das Protokoll wird wie unten gezeigt als Suchergebnis angezeigt

{
  "insertId": "xxxxxxxxxxxxxxxxxxxxxxxx",
  "jsonPayload": {
    "message": {"foo": "foo", "boo": "boo"},
    "traceback": [],
    "timestamp": "2020-07-07 15:33:28",
    "level": "INFO"
  },
  ...
}

Recommended Posts

Behandeln Sie strukturierte Protokolle mit GCP Cloud Logging
Textextraktion mit GCP Cloud Vision API (Python3.6)
Behandle Excel mit Python
Behandle Rabbimq mit Python
Punktwolke mit Pfeffer
[GCP] Ausgeben von Cloud-Funktionsprotokollen an Cloud Logging (Stackdriver Logging) (Python)