Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat!: support string-encoded json #339

Merged
merged 9 commits into from
Jul 27, 2021
Merged

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.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

structured logging fails to create valid json in some cases
3 participants