Skip to content

Add StructuredLogHandler adapter #750

Open
@NewGlad

Description

@NewGlad

Thanks for stopping by to let us know something could be better!

Is your feature request related to a problem? Please describe.

In my project hosted in Google Cloud, I use StructuredLogHandler and quite often I need to pass some predefined context to log labels for easier system monitoring.
Let's say it could be some service configuration values, code versions, and many more.

Basically, I need to pass such context data every logger call: logger.info('my message', extra={'labels': ...}} which is hard to maintain.

Describe the solution you'd like

For this case, we have logging.LoggerAdapter in the Python standard library.
And I propose adding a specific adapter to support the Google Cloud format for this purpose.
I have implemented it already in my project, and think it could be useful for everyone.
With that adapter, I need to configure my logging context once and use my logger in an easier manner.
Let's look at the example:

import logging
from google.cloud.logging_v2.handlers.structured_log import AppendLabelLoggingAdapter
from google.cloud.logging_v2.handlers.structured_log import StructuredLogHandler
logging.root.setLevel(logging.INFO)
logging.root.handlers = [StructuredLogHandler()]
first_adapter = AppendLabelLoggingAdapter(logging.root, {'a': 5, 'b': 6})
first_adapter.info('first info')
{
    "message": "first info",
    "severity": "INFO",
    "logging.googleapis.com/labels": {"python_logger": "root", "a": 5, "b": 6}
    [...]
}
# Could be stacked
second_adapter=AppendLabelLoggingAdapter(first_adapter, {'hello': 'world'})
second_adapter.info('second info')
{
    "message": "second info",
    "severity": "INFO",
    "logging.googleapis.com/labels": {"python_logger": "root", "hello": "world", "a": 5, "b": 6}
    [...]
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    api: loggingIssues related to the googleapis/python-logging API.priority: p3Desirable enhancement or fix. May not be included in next release.type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions