Skip to content

Conversation

daniel-sanche
Copy link
Contributor

We recently merged a PR into the v3.0.0 staging branch adding support for logging dicts as jsonPayload logs in our custom handlers:

logging.error({'a':'b'}) ↓ {"a" : "b"} 

While this can be useful in basic logging set-ups, the Python logging API expects string-like msg inputs, so this can't always be relied on to work properly in more complex logging environments.

With this PR, the handlers will also attempt to parse a dictionary out of the final log string before sending it on Cloud Logging, so string-encoded dictionaries will work as expected:

logging.error('{"a": "b"}') ↓ {"a" : "b"} 

This also allows you to set a formatter object with logging attributes once, and then continue to log strings as normal. Each log will now show up in jsonPayload format in CloudLogging

formatter = logging.Formatter(fmt='{"thread": "%(threadName)s", "message": "%(msg)s", "hardcoded": "test" }') handler.setFormatter(logFormatter) logging.error("hello") ↓ {"message": "hello", "thread": "MainThread", "hardcoded": "test" } 

You can also specify in custom fields using the extra argument:

formatter = logging.Formatter(fmt='{"message": "%(msg)s", "custom": "%(custom_arg)s" }') handler.setFormatter(logFormatter) logging.error("hello", extra={"custom_arg":"test"}) ↓ {"message": "hello", "custom": "test" } 

Fixes #331

@daniel-sanche daniel-sanche requested review from a team as code owners June 24, 2021 22:04
@product-auto-label product-auto-label bot added the api: logging Issues related to the googleapis/python-logging API. label Jun 24, 2021
@google-cla google-cla bot added the cla: yes This human has signed the Contributor License Agreement. label Jun 24, 2021
@daniel-sanche daniel-sanche linked an issue Jun 24, 2021 that may be closed by this pull request
@daniel-sanche daniel-sanche added the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 26, 2021
@yoshi-kokoro yoshi-kokoro removed the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 26, 2021
@daniel-sanche daniel-sanche added the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 26, 2021
@yoshi-kokoro yoshi-kokoro removed the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 26, 2021
@daniel-sanche daniel-sanche added the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 27, 2021
@yoshi-kokoro yoshi-kokoro removed the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 27, 2021
@daniel-sanche daniel-sanche added the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 27, 2021
@yoshi-kokoro yoshi-kokoro removed the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 27, 2021
@daniel-sanche daniel-sanche merged commit 5f7cf40 into v3.0.0 Jul 27, 2021
@daniel-sanche daniel-sanche deleted the string-encoded-json branch July 27, 2021 18:20
daniel-sanche added a commit that referenced this pull request Jan 27, 2022
daniel-sanche added a commit that referenced this pull request Jan 27, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api: logging Issues related to the googleapis/python-logging API. cla: yes This human has signed the Contributor License Agreement.

3 participants