简体   繁体   中英

How to send logs to GCP using StructuredLogHandler with jsonPayload?

I am trying to send logs (with jsonPayload) to GCP using StructuredLogHandler with below python code.

rootlogger = logging.getLogger()

client = google.cloud.logging.Client(credentials=xxx, project=xxx)

h = StructuredLogHandler()
    
rootlogger.addHandler(h)

logger = logging.getLogger('test')
logger.warning('warning')

I see that logs are being printed on console (in json format) but the logs are not sent to GCP Log Explorer. Can someone help?

Since v3 of Python Cloud Logging Library it's now easier than ever as it integrates with the Python standard logging library with client.setup_logging :

import logging
import google.cloud.logging

# Instantiate a client
client = google.cloud.logging.Client()

# Retrieves a Cloud Logging handler based on the environment
# you're running in and integrates the handler with the
# Python logging module. By default this captures all logs
# at INFO level and higher
client.setup_logging()

Name your logger as usual. Eg

logger = logging.getLogger('test')

Then if you want to send structured log messages to Cloud Logging then you can use one of two methods:

  1. Use the json_fields extra argument:
data_dict = {"hello": "world"}
logging.info("message field", extra={"json_fields": data_dict})
  1. Use a JSON-parseable string (requires importing the json module):
import json

data_dict = {"hello": "world"}
logging.info(json.dumps(data_dict))

This will see your log messages sent to Google Cloud and the JSON payload available under the jsonPayload field of the expanded log entry:

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM