Skip to main content

Intro, in which opinions are had

Cazoo-Logger is a deeply opinionated structured logger for Python on AWS Lambda.

Cazoo-Logger owes a debt to aws_lambda_logger which is both less opinionated, and probaby better suited to your particular use-case than this library. Go check it out.

Basic Usage

The Cazoo Logger module exposes a single function config that sets up the logger for use.

>>> import cazoo_logger
>>> cazoo_logger.config()

By default this configures the root logger at INFO level, writing to a special JSON formatter.

To obtain a logger instance, call the appropriate fromContext function with your incoming event and context:

>>> def handler(event, context):
...     logger = cazoo_logger.fromContext(event, context)
...     logger.info('sup?')
...

This will result in well-formatted json messages with a documented schema.

{
    "msg": "sup?",
    "context": {
        "request_id": "abc123",
        "function": {"name": "do-things", "version": "0.1.2.3"},
        "sns": {
            "id": "66591d01-0241-5751-bb17-586e5a6dcf91",
            "topic": "arn:aws:sns:us-east-1:12345678912:bucket-o-stuff",
            "type": "Notification",
            "subject": "Amazon S3 Notification",
        },
    }
}

If you don’t have an AWS context and event, you can construct a logger with no context

>>> logger = cazoo_logger.empty()

Logging Errors

Logging caught errors is as simple as setting the exc_info kwarg to True on the log call.

>>> try:
...     raise ValueError("What in the heck do you call that?")
... except:
...     logger.warn("I dunno man, looks pretty sketchy to me", exc_info=True)
...
    {"msg": "I dunno man, looks pretty sketchy to me", "data": {"error": {"name": "ValueError", "message": "What in the heck do you call that?", "stack": "Traceback (most recent call last):\n  File \"<stdin>\", line 2, in <module>\nValueError: What in the heck do you call that?"}}}

Logging additional data

You might want to include additional structured data in your logs. Any values you pass to the extra kwarg will be json serialised into the data section of your log line.

>>> logger.info("I did a query", extra={'sql': {'query': 'select * from table where field = ?', 'parameters': [123] }})
{"msg": "I did a query", "data": {"sql": {"query": "select * from table where field = ?", "parameters": [123]}}}

You can also use the with_data method. This method returns a new logger instance with the data section pre-populated.

>>> new_logger = logger.with_data(sql={'query': 'select * from foo where bar = ?', 'parameters':[234]})
>>> new_logger.debug('doin a query')
{"msg": "doin a query", "data": {"sql": {"query": "select * from foo where bar = ?", "parameters": [234]}}}
>>> new_logger.error('oh noes! the query did not work!')
{"msg": "oh noes! the query did not work!", "data": {"sql": {"query": "select * from foo where bar = ?", "parameters": [234]}}}

Logging additional context

Similarly you might want to add more data to the context section of your log event.

>>> new_logger = logger.with_context(request_id='abc-123')
>>> new_logger.info('handling request')
{"msg": "handling request", "context": {"request_id": "abc-123"}}

Additional Log Levels

The add_logging_level function allows you to add custom log levels to the logger. So for example a level of “TRACE” could be added at 15 to provide a level of logging is between DEBUG and INFO.

Metadata

Release files for cazoo-logger 0.11.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cazoo-logger 0.11.0
File Size Uploaded
cazoo_logger-0.11.0.tar.gz 23.8 kB Details

Release files / cazoo_logger-0.11.0.tar.gz

Download URL cazoo_logger-0.11.0.tar.gz
Size 23.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a8cd3a76f112a5af66bf7efa41dab4fa7c8669b6aef0923a5a750a837ac4e88d
BLAKE2b-256 checksum
How to use checksums
decc359015c50eebf7992ca13149fbd5ada15c512f1b622e8113d06edd77aa24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.2.0 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.11

Release history Release notifications | RSS feed

This release

0.11.0 This release

1 release file

0.10.0

1 release file

0.9.0

2 release files

0.8.0

1 release file

0.7.0

1 release file

0.6.0

1 release file

0.5.0

1 release file

0.4.2

1 release file

0.4.1

1 release file

0.4.0

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.0

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

0.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page