The coloredlogs package enables colored terminal output for Python's logging
module. The ColoredFormatter class inherits from logging.Formatter and uses
ANSI escape sequences to render your logging messages in color. It uses
only standard colors so it should work on any UNIX terminal. It's currently
tested on Python 2.6, 2.7, 3.4 and PyPy. On Windows coloredlogs automatically
pulls in Colorama as a dependency and enables ANSI escape sequence translation
using Colorama. Here is a screen shot of the demo that is printed when the
command coloredlogs --demo
is executed:
Note that the screenshot above includes the custom logging level VERBOSE defined by my verboselogs package: if you install both coloredlogs and verboselogs it will Just Work (verboselogs is of course not required to use coloredlogs).
The logging handler does not use ANSI escape sequences when output redirection applies (for example when the standard error stream is being redirected to a file or another program) so if you like the format (see below) you can use it for your log files as well.
The ColoredFormatter class supports user defined log formats so you can use any log format you like. The default log format is as follows:
%(asctime)s %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s
This log format results in the following output:
2015-10-23 03:32:22 peter-macbook coloredlogs.demo[30462] DEBUG message with level 'debug' 2015-10-23 03:32:23 peter-macbook coloredlogs.demo[30462] VERBOSE message with level 'verbose' 2015-10-23 03:32:24 peter-macbook coloredlogs.demo[30462] INFO message with level 'info' ...
You can customize the log format and styling using environment variables as well as programmatically, please refer to the online documentation for details.
Here's an example of how easy it is to get started:
# Create a logger object.
import logging
logger = logging.getLogger('your-module')
# Initialize coloredlogs.
import coloredlogs
coloredlogs.install(level='DEBUG')
# Some examples.
logger.debug("this is a debugging message")
logger.info("this is an informational message")
logger.warn("this is a warning message")
logger.error("this is an error message")
logger.critical("this is a critical message")
Although the logging handler was originally meant for interactive use, it can also be used to generate log files. In this case the ANSI escape sequences are not used so the log file will contain plain text and no colors. If you use Vim and coloredlogs and would like to view your log files in color, you can try the two Vim scripts included in the coloredlogs source distributions and git repository:
When coloredlogs is used in a cron job, the output that's e-mailed to you by cron won't contain any ANSI escape sequences because coloredlogs realizes that it's not attached to an interactive terminal. If you'd like to have colors e-mailed to you by cron there's a simple way to set it up:
MAILTO="your-email-address@here" CONTENT_TYPE="text/html" * * * * * root coloredlogs --to-html your-command
The coloredlogs
program is installed when you install the coloredlogs
package. When you execute coloredlogs --to-html your-command
it runs
your-command
under the external program script
(you need to have this
installed). This makes your-command
think that it's attached to an
interactive terminal which means it will output ANSI escape sequences which
will then be converted to HTML by the coloredlogs
program. Yes, this is a
bit convoluted, but it works great :-)
You can use this feature without using coloredlogs in your Python modules, but please note that only normal text, bold text and text with one of the foreground colors black, red, green, yellow, blue, magenta, cyan and white (these are the portable ANSI color codes) are supported.
The latest version of coloredlogs is available on PyPI and GitHub. The online documentation is available on Read The Docs. For bug reports please create an issue on GitHub. If you have questions, suggestions, etc. feel free to send me an e-mail at peter@peterodding.com.
This software is licensed under the MIT license.
© 2015 Peter Odding.