BJ2
BJ2

Reputation: 31

How do I query GCP log viewer and obtain json results in Python 3.x (like gcloud logging read)

I'm building a tool to download GCP logs, save the logs to disk as single line json entries, then perform processing against those logs. The program needs to support both logs exported to cloud storage and logs currently in stackdriver (to partially support environments where exports to cloud storage hasn't been pre-configured). The cloud storage piece is done, but I'm having difficulty with downloading logs from stackdriver.

I would like to implement similar functionality to the gcloud function 'gcloud logging read' in Python. Yes, I could use gcloud, however I would like to build everything into the one tool.

I currently have this sample code to print the result of hits, however I can't get the full log entry in JSON format:

def downloadStackdriver():
    client = logging.Client()
    FILTER = "resource.type=project"
    for entry in client.list_entries(filter_=FILTER):
        a = (entry.payload.value)
        print(a)

How can I obtain full JSON output of matching logs like it works using gcloud logging read?

Based on other stackoverflow pages, I've attempted to use MessageToDict and MessageToJson, however I receive the error

"AttributeError: 'ProtobufEntry' object has no attribute 'DESCRIPTOR'"

Upvotes: 3

Views: 5840

Answers (1)

Dustin Ingram
Dustin Ingram

Reputation: 21520

You can use the to_api_repr function on the LogEntry class from the google-cloud-logging package to do this:

from google.cloud import logging

client = logging.Client()
logger = client.logger('log_name')

for entry in logger.list_entries():
    print(entry.to_api_repr())

Upvotes: 1

Related Questions