Une sortie de journal dans un format de données tel que JSON, comme indiqué ci-dessous. GCP analyse automatiquement les journaux au format JSON à utiliser dans les requêtes de recherche, ce qui est pratique. (Confirmé dans Cloud Run) Les sauts de ligne sont également échappés en tant que JSON, ce qui facilite la gestion des journaux multilignes comme effet secondaire.
{"level": "INFO", "message": "hello\nworld", "timestamp": "2020-07-01 00:00:00"}
En Python, vous pouvez générer le journal au format JSON en définissant votre propre formateur dans logger.
$ 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)
Chargez et utilisez l'enregistreur défini.
sample.py
from logger import logger
logger.info("hello\nworld")
logger.info({"foo": "foo", "boo": "boo"})
Le journal suivant est généré.
{"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
Vous pouvez effectuer une recherche à partir de l'écran GCP Cloud Logging-> Log Viewer.
La sortie des données sous forme de journal comme indiqué ci-dessous est stockée dans jsonPayload
, et la clé peut être spécifiée sur la requête.
resource.type="cloud_run_revision"
jsonPayload.level="INFO"
jsonPayload.message.foo="foo"
Le journal apparaîtra comme résultat de la recherche comme indiqué ci-dessous
{
"insertId": "xxxxxxxxxxxxxxxxxxxxxxxx",
"jsonPayload": {
"message": {"foo": "foo", "boo": "boo"},
"traceback": [],
"timestamp": "2020-07-07 15:33:28",
"level": "INFO"
},
...
}
Recommended Posts