Skip to content

Custom logs from a GCP Function do not contain execution-id #343

Closed
@amertkara

Description

@amertkara

I am not sure if this is a bug or a misconfiguration issue but we are unable to get the execution-id in our logs. GCP's own function logs like startup/teardown/timeout contain it however our own logs don't. This makes it impossible to correlate all logs from an instance.

Example (GCP function startup log)

{
  insertId: "000000-a51b0cd9-1f4d-4396-b812-4b35c8878b69"
  labels: {
    execution_id: "j57c7yk340qq"
  }
  logName: "projects/PROJECT-ID/logs/cloudfunctions.googleapis.com%2Fcloud-functions"
  receiveTimestamp: "2021-06-30T17:37:16.202805413Z"
  resource: {
    labels: {
      function_name: "FUNCTION-NAME",
      project_id: "PROJECT-ID",
      region: "REGION"
    }
    type: "cloud_function"
  }
  severity: "DEBUG"
  textPayload: "Function execution started"
  timestamp: "2021-06-30T17:37:05.341077546Z"
}

We also tried setting a custom label in CloudLoggingHandler with a trace-id however GCP's own logs don't reflect the custom trace-id. This makes me think that GCP is using a separate logger which attaches the execution-id and our logs are isolated from that logger.

Environment details

  • OS type and version: N/A
  • Python version: 3.7.9
  • pip version: 21.1.2
  • google-cloud-logging version: 2.3.1

Steps to reproduce

  1. Create and attach CloudLoggingHandler to a logger in a GCP function
  2. Log an INFO message
  3. Verify the log does not contain execution-id inside labels

Code example

A simplified version of our logging setup and a basic event-trigger function.

import logging

import google.cloud.logging
from google.cloud.logging_v2.handlers.handlers import CloudLoggingHandler


class FunctionLogger(logging.Logger):

    def __init__(self, level=logging.NOTSET):
        super().__init__("logger_name", level)

        client = google.cloud.logging.Client()

        self._handler = CloudLoggingHandler(client)

        self.propagate = False  # prevent logging from root logger
        self.addHandler(self._handler)


def handler(event, context=None):
    """function entry point"""
    logger = FunctionLogger()

    logger.info("Test message")

Thanks!!

Metadata

Metadata

Assignees

Labels

api: loggingIssues related to the googleapis/python-logging API.priority: p2Moderately-important priority. Fix may not be included in next release.type: questionRequest for information or clarification. Not an issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions