logzero
Robust and effective logging for Python 2 and 3.
- Documentation: https://logzero.readthedocs.io
- GitHub: https://github.com/metachris/logzero
Features
- Easy logging to console and/or (rotating) file.
- Provides a fully configured standard Python logger object.
- JSON logging (with integrated python-json-logger)
- Pretty formatting, including level-specific colors in the console.
- No dependencies
- Windows color output supported by colorama
- Robust against str/bytes encoding problems, works with all kinds of character encodings and special characters.
- Multiple loggers can write to the same logfile (also across multiple Python files and processes).
- Global default logger with logzero.logger and custom loggers with logzero.setup_logger(..).
- Compatible with Python 2 and 3.
- All contained in a single file.
- Licensed under the MIT license.
- Heavily inspired by the Tornado web framework.
Installation:
python -m pip install logzero
Example Usage
from logzero import logger
logger.debug("hello")
logger.info("info")
logger.warning("warn")
logger.error("error")
# This is how you'd log an exception
try:
raise Exception("this is a demo exception")
except Exception as e:
logger.exception(e)
# JSON logging
import logzero
logzero.json()
logger.info("JSON test")
# Start writing into a logfile
logzero.logfile("/tmp/logzero-demo.log")
# Set a minimum loglevel
logzero.loglevel(logzero.WARNING)
This is the output:
Note: You can find more examples in the documentation: https://logzero.readthedocs.io
JSON logging
JSON logging can be enabled for the default logger with logzero.json(), or with setup_logger(json=True) for custom loggers:
>>> logzero.json()
>>> logger.info("test")
{"asctime": "2020-10-21 10:42:45,808", "filename": "<stdin>", "funcName": "<module>", "levelname": "INFO", "levelno": 20, "lineno": 1, "module": "<stdin>", "message": "test", "name": "logzero_default", "pathname": "<stdin>", "process": 76179, "processName": "MainProcess", "threadName": "MainThread"}
>>> my_logger = setup_logger(json=True)
>>> my_logger.info("test")
{"asctime": "2020-10-21 10:42:45,808", "filename": "<stdin>", "funcName": "<module>", "levelname": "INFO", "levelno": 20, "lineno": 1, "module": "<stdin>", "message": "test", "name": "logzero_default", "pathname": "<stdin>", "process": 76179, "processName": "MainProcess", "threadName": "MainThread"}
The logged JSON object has these fields:
{
"asctime": "2020-10-21 10:43:40,765",
"filename": "test.py",
"funcName": "test_this",
"levelname": "INFO",
"levelno": 20,
"lineno": 9,
"module": "test",
"message": "info",
"name": "logzero",
"pathname": "_tests/test.py",
"process": 76204,
"processName": "MainProcess",
"threadName": "MainThread"
}
Exceptions logged with logger.exception(e) have these additional JSON fields:
{
"levelname": "ERROR",
"levelno": 40,
"message": "this is a demo exception",
"exc_info": "Traceback (most recent call last):\n File \"_tests/test.py\", line 15, in test_this\n raise Exception(\"this is a demo exception\")\nException: this is a demo exception"
}
Take a look at the documentation for more information and examples:
- Documentation: https://logzero.readthedocs.io.
Installation
Install logzero with pip:
python -m pip install logzero
Here's how you setup a virtualenv and download and run the demo:
# Create and activate a virtualenv in ./venv/
python3 -m venv venv
. venv/bin/activate
# Install logzero
python -m pip install logzero
# Download and run demo.py
wget https://raw.githubusercontent.com/metachris/logzero/master/examples/demo.py
python demo.py
If you don't have pip installed, this Python installation guide can guide you through the process.
Alternatively, if you use the Anaconda distribution:
$ conda config --add channels conda-forge
$ conda install logzero
You can also install logzero from the public Github repo:
$ git clone https://github.com/metachris/logzero.git
$ cd logzero
$ python setup.py install
Contributors
- Chris Hager
- carlodr
- Brian Lenz
- David Martin
- Zakaria Zajac (creator of python-json-logger)
Development
Getting started
$ git clone https://github.com/metachris/logzero.git
$ cd logzero
# Activate virtualenv
$ python3 -m venv venv
$ . venv/bin/activate
# Install main and dev dependencies
$ pip install -e .
$ pip install -r requirements_dev.txt
# Run the tests
$ make test
# Run the linter
$ make lint
# Generate the docs (will auto-open in Chrome)
$ make docs
# You can enable watching mode to automatically rebuild on changes:
$ make servedocs
To test with Python 2.7, you can use Docker:
docker run --rm -it -v /Users/chris/stream/logzero:/mnt python:2.7 /bin/bash
Now you have a shell with the current directory mounted into /mnt/ inside the container.
Notes
- pytest is the test runner
- CI is run with Github actions.
- Download stats: https://pepy.tech/project/logzero
Changelog
See the changelog here: https://github.com/metachris/logzero/blob/master/HISTORY.md
Feedback
All kinds of feedback and contributions are welcome.
- Create an issue
- Create a pull request
- @metachris
History
1.6.5 (2021-03-17)
- Export loglevels directly (you can use eg.
logzero.DEBUGinstead oflogging.DEBUG) setup_default_loggerusebackupCount- Update dependencies
- PRs: (386)[https://github.com/metachris/logzero/pull/386]
1.6.3 (2020-11-15)
- JSON logging with UTF-8 enabled by default (PR 357)
1.6.0 (1.6.2) (2020-10-29)
- JSON logging support (PR 344)
- Ability to easily change colors (#82)
- Allow creating a root logger (#342)
- Bugfix: file logging with lower loglevel than stream (PR 338)
- Running tests with Python up to 3.9
- Dependency updates
1.5.0 (2018-03-07)
logzero.syslog(..)(PR 83)
1.4.0 (2018-03-02)
- Allow Disabling stderr Output (PR 83)
1.3.0 (2017-07-19)
- Color output now works in Windows (supported by colorama)
1.2.1 (2017-07-09)
- Logfiles with custom loglevels (eg. stream handler with DEBUG and file handler with ERROR).
1.2.0 (2017-07-05)
- Way better API for configuring the default logger with logzero.loglevel(..), logzero.logfile(..), etc.
- Built-in rotating logfile support.
import logging
import logzero
from logzero import logger
# This log message goes to the console
logger.debug("hello")
# Set a minimum log level
logzero.loglevel(logging.INFO)
# Set a logfile (all future log messages are also saved there)
logzero.logfile("/tmp/logfile.log")
# Set a rotating logfile (replaces the previous logfile handler)
logzero.logfile("/tmp/rotating-logfile.log", maxBytes=1000000, backupCount=3)
# Disable logging to a file
logzero.logfile(None)
# Set a custom formatter
formatter = logging.Formatter('%(name)s - %(asctime)-15s - %(levelname)s: %(message)s');
logzero.formatter(formatter)
# Log some variables
logger.info("var1: %s, var2: %s", var1, var2)
1.1.2 (2017-07-04)
- Better reconfiguration of handlers, doesn't remove custom handlers anymore
1.1.0 (2017-07-03)
- Bugfix: Disabled color logging to logfile
1.1.0 (2017-07-02)
- Global default logger instance (logzero.logger)
- Ability to reconfigure the default logger with (logzero.setup_default_logger(..))
- More tests
- More documentation
1.0.0 (2017-06-27)
- Cleanup and documentation
0.2.0 (2017-06-12)
- Working logzero package with code and tests
0.1.0 (2017-06-12)
- First release on PyPI.
Metadata
Release files for logzero 1.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| logzero-1.7.0.tar.gz | 577.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| logzero-1.7.0-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 594.0 kB
Release files / logzero-1.7.0.tar.gz
| Download URL | logzero-1.7.0.tar.gz |
|---|---|
| Size | 577.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7f73ddd3ae393457236f081ffebd044a3aa2e423a47ae6ddb5179ab90d0ad082
|
|
BLAKE2b-256 checksum How to use checksums |
bc9a018883ee64df0900bde1ac314868f81d12cbc450e51b216ab55e6e4dfc7d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2
|
Release files / logzero-1.7.0-py2.py3-none-any.whl
| Download URL | logzero-1.7.0-py2.py3-none-any.whl |
|---|---|
| Size | 16.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
23eb1f717a2736f9ab91ca0d43160fd2c996ad49ae6bad34652d47aba908769d
|
|
BLAKE2b-256 checksum How to use checksums |
b368aa714515d65090fcbcc9a1f3debd5a644b14aad11e59238f42f00bd4b298
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2
|