best practice low-config python logging
Project description
vcdilog: logging as easy as print statements
You almost certainly should be using log statement instead of messy print statements. vcdilog
makes this easy.
Install
You can install vcdilog
using pip:
$ pip install vcdilog
If using poetry, simply add this line to your pyproject.toml
file.
vcdilog = "*"
Philosophy
The built in python logging library is highly customizable, but hard to visualize and understand. vcdilog
doesn't try to replace what is in the standard library, but streamlines it with sensible defaults.
Basic, instead-of-print-statements usage
All you need is two lines of setup: One import, and one line to add a handler for stdout/stderr output.
from vcdilog import log
log.add_std_handler()
log.info('hello world') # .info, .warning, .debug, etc
More flexible usage
You can create a log object:
from vcdilog import Logger
log = Logger()
Crucially, you don’t need to give the logger a name, it will figure out the current module name automatically and use that. This same method is used by the print-statements example above - they'll be logged to an appropriately-named logger automatically, based on the module they're in.
You can set a log level with:
log.set_level(level="DEBUG")
DEBUG means all logged messages will actually get logged. When you add a handler with e.g. add_std_handler
, the handler will be assigned the DEBUG
level by default, and so will the associated logger.
For production usage, a lower level should ordinarily be set to avoid overly verbose logging.
Other handlers
So far three handlers are supported.
x.add_std_handler()
x.add_null_handler()
x.add_json_handler()
As per the above, the standard output handler logs to the console. It uses some customization log errors to stderr and normal messages to stdout, just like print()
does, which means you can use logging calls instead of print statements.
The null handler should be used in libraries - it’s best practice when publishing a library to create a logger but add only a null handler and no others to that users of the library don’t get unwanted log messages (if they want to see them, they’ll add their own handlers).
Then there’s the json handler. That logs json-formatted log items to a file.
For instance, the following:
log.info("classic message", extra={"special": "value", "run": 12})
Will result in:
{"message": "classic message", "special": "value", "run": 12}
In the log file (log.json by default)
Basic prefect support
Getting a prefect logger is as easy as:
prefect_logger = vcdilog.get_prefect_logger()
and you can do...
vcdilog.set_prefect_extra_loggers(['boto3', 'whatever'])
to have those loggers inherit the prefect logging config.
More prefect support is on the way!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file vcdilog-0.2.0.tar.gz
.
File metadata
- Download URL: vcdilog-0.2.0.tar.gz
- Upload date:
- Size: 4.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.6 CPython/3.8.10 Linux/5.4.0-1049-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4638f49619c4f742a02b68d1cc99b35783734193570b7bb1a8835beed9e48092 |
|
MD5 | 0bcee610223039ea3d2d4d618663951f |
|
BLAKE2b-256 | e246e8900babab1ef637fccfe5df7d0f98ef0b3100d1b606c9f8b82e03586741 |
File details
Details for the file vcdilog-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: vcdilog-0.2.0-py3-none-any.whl
- Upload date:
- Size: 4.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.6 CPython/3.8.10 Linux/5.4.0-1049-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b374d4e3c7e491f278528da4623c91e3be115f83dce55f884756e51832c23399 |
|
MD5 | da07b67264b3d3fba3d5fa5fab5fbd9b |
|
BLAKE2b-256 | 1c1ee25e6ecb4363d11e945e2a15d8d41938469888d8f32ab183de962c3c6046 |