1

I'm trying to write some structure logs out on stdout from my python program. Specifically I'm trying to write json that is compliant with the following, so that when it's run in GCP, it gets picked up by stack driver and interpreted as structured data:

https://cloud.google.com/run/docs/logging#run_manual_logging-python

Looking at the python docs, I could create a class for my structured data, and have it render down to a single line json string:

https://docs.python.org/2/howto/logging-cookbook.html#implementing-structured-logging

What I'm stuck on however is; how do I add the log level to that structured data without having redundant looking log calls:

class StructuredMessage(object):
def __init__(self, **kwargs):
    self.kwargs = kwargs

def __str__(self):
    return json.dumps(self.kwargs)

// Ideally I should have to type level='INFO' here, is there a way to get the logging
// module to do something to insert that information on the StructuredMessage instance?
logging.info(StructuredMessage(level='INFO'))

1 Answer 1

1

There are numerous ways you can do this - one would be using a simple helper function like this (it assumes import logging has been done):

def log_structured(logger, level, **kwargs):
    kwargs[level] = level
    # you could also inject the logger name into kwargs here ...
    # convert e.g. string 'INFO' to logging.INFO
    # assumes you only use the standard levels defined in logging
    level = getattr(logging, level)
    logger.log(level, StructuredMessage(**kwargs))

Functions like logging.info() use the root logger, so you could do something like

root_logger = logging.getLogger()
log_structured(root_logger, 'INFO', foo='bar', bar='baz', num=123, fnum=123.456)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.