All Projects → xolox → Python Coloredlogs

xolox / Python Coloredlogs

Licence: mit
Colored terminal output for Python's logging module

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Python Coloredlogs

Term
Unix terminal drain and formatter for slog-rs
Stars: ✭ 17 (-95.83%)
Mutual labels:  terminal, logging
Tlog
Terminal I/O logger
Stars: ✭ 170 (-58.33%)
Mutual labels:  terminal, syslog
Video To Ascii
It is a simple python package to play videos in the terminal using characters as pixels
Stars: ✭ 960 (+135.29%)
Mutual labels:  terminal, ansi-colors
Quicklogger
Library for logging on files, console, memory, email, rest, eventlog, syslog, slack, telegram, redis, logstash, elasticsearch, influxdb, graylog, Sentry, Twilio, ide debug messages and throw events for Delphi/Firemonkey/freepascal/.NET (Windows/Linux/OSX/IOS/Android).
Stars: ✭ 137 (-66.42%)
Mutual labels:  logging, syslog
Paint
Ruby gem for ANSI terminal colors 🎨︎ VERY FAST
Stars: ✭ 317 (-22.3%)
Mutual labels:  terminal, ansi-colors
Ololog
A better console.log for the log-driven debugging junkies
Stars: ✭ 141 (-65.44%)
Mutual labels:  logging, ansi-colors
Ls Go
A more colorful, user-friendly implementation of `ls` written in Go
Stars: ✭ 162 (-60.29%)
Mutual labels:  terminal, ansi-colors
Syslog Ng
syslog-ng is an enhanced log daemon, supporting a wide range of input and output methods: syslog, unstructured text, queueing, SQL & NoSQL.
Stars: ✭ 1,555 (+281.13%)
Mutual labels:  logging, syslog
Analog
PHP logging library that is highly extendable and simple to use.
Stars: ✭ 314 (-23.04%)
Mutual labels:  logging, syslog
Console
OS X console application.
Stars: ✭ 298 (-26.96%)
Mutual labels:  logging, syslog
Documentation
Stars: ✭ 133 (-67.4%)
Mutual labels:  logging, syslog
Go Syslog
Blazing fast syslog parser
Stars: ✭ 370 (-9.31%)
Mutual labels:  logging, syslog
Captainslog
A Syslog Protocol Parser
Stars: ✭ 130 (-68.14%)
Mutual labels:  logging, syslog
Rich
Rich is a Python library for rich text and beautiful formatting in the terminal.
Stars: ✭ 31,664 (+7660.78%)
Mutual labels:  terminal, ansi-colors
Docker Logger
Logs collector for docker
Stars: ✭ 126 (-69.12%)
Mutual labels:  logging, syslog
Ansi Escape Sequences
A simple, isomorphic library containing all known terminal ansi escape codes and sequences.
Stars: ✭ 44 (-89.22%)
Mutual labels:  terminal, ansi-colors
Punt
Punt is a tiny and lightweight daemon which helps ship logs to Elasticsearch.
Stars: ✭ 98 (-75.98%)
Mutual labels:  logging, syslog
Rsyslog
a Rocket-fast SYStem for LOG processing
Stars: ✭ 1,385 (+239.46%)
Mutual labels:  logging, syslog
Tty Logger
A readable, structured and beautiful logging for the terminal
Stars: ✭ 280 (-31.37%)
Mutual labels:  terminal, logging
Ansi
Small, fast library to create ANSI colored strings and codes. [go, golang]
Stars: ✭ 323 (-20.83%)
Mutual labels:  terminal, ansi-colors

coloredlogs: Colored terminal output for Python's logging module

.. image:: https://travis-ci.org/xolox/python-coloredlogs.svg?branch=master :target: https://travis-ci.org/xolox/python-coloredlogs

.. image:: https://coveralls.io/repos/github/xolox/python-coloredlogs/badge.svg?branch=master :target: https://coveralls.io/github/xolox/python-coloredlogs?branch=master

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.7, 3.5+ and PyPy (2 and 3). On Windows coloredlogs automatically tries to enable native ANSI support (on up-to-date Windows 10 installations) and falls back on using colorama_ (if installed). Here is a screen shot of the demo that is printed when the command coloredlogs --demo is executed:

.. image:: https://coloredlogs.readthedocs.io/en/latest/_images/defaults.png

Note that the screenshot above includes custom logging levels 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).

.. contents:: :local:

Installation

The coloredlogs package is available on PyPI_ which means installation should be as simple as:

.. code-block:: console

$ pip install coloredlogs

There's actually a multitude of ways to install Python packages (e.g. the per user site-packages directory, virtual environments or just installing system wide) and I have no intention of getting into that discussion here, so if this intimidates you then read up on your options before returning to these instructions 😉.

Optional dependencies


Native ANSI support on Windows requires an up-to-date Windows 10 installation.
If this is not working for you then consider installing the colorama_ package:

.. code-block:: console

   $ pip install colorama

Once colorama_ is installed it will be used automatically.

Usage
-----

Here's an example of how easy it is to get started:

.. code-block:: python

   import coloredlogs, logging

   # Create a logger object.
   logger = logging.getLogger(__name__)

   # By default the install() function installs a handler on the root logger,
   # this means that log messages from your code and log messages from the
   # libraries that you use will all show up on the terminal.
   coloredlogs.install(level='DEBUG')

   # If you don't want to see log messages from libraries, you can pass a
   # specific logger object to the install() function. In this case only log
   # messages originating from that logger will show up on the terminal.
   coloredlogs.install(level='DEBUG', logger=logger)

   # Some examples.
   logger.debug("this is a debugging message")
   logger.info("this is an informational message")
   logger.warning("this is a warning message")
   logger.error("this is an error message")
   logger.critical("this is a critical message")

Format of log messages
----------------------

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.

Enabling millisecond precision

If you're switching from logging.basicConfig()_ to coloredlogs.install()_ you may notice that timestamps no longer include milliseconds. This is because coloredlogs doesn't output milliseconds in timestamps unless you explicitly tell it to. There are three ways to do that:

  1. The easy way is to pass the milliseconds argument to coloredlogs.install()_::

    coloredlogs.install(milliseconds=True)

    This became supported in release 7.1_ (due to #16_).

  2. Alternatively you can change the log format to include 'msecs'_::

    %(asctime)s,%(msecs)03d %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s

    Here's what the call to coloredlogs.install()_ would then look like::

    coloredlogs.install(fmt='%(asctime)s,%(msecs)03d %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s')

    Customizing the log format also enables you to change the delimiter that separates seconds from milliseconds (the comma above). This became possible in release 3.0_ which added support for user defined log formats.

  3. If the use of %(msecs)d isn't flexible enough you can instead add %f to the date/time format, it will be replaced by the value of %(msecs)03d. Support for the %f directive was added to release 9.3_ (due to #45_).

Custom logging fields


The following custom log format fields are supported:

- ``%(hostname)s`` provides the hostname of the local system.
- ``%(programname)s`` provides the name of the currently running program.
- ``%(username)s`` provides the username of the currently logged in user.

When `coloredlogs.install()`_ detects that any of these fields are used in the
format string the applicable logging.Filter_ subclasses are automatically
registered to populate the relevant log record fields.

Changing text styles and colors
-------------------------------

The online documentation contains `an example of customizing the text styles and
colors <https://coloredlogs.readthedocs.io/en/latest/api.html#changing-the-colors-styles>`_.

Colored output from cron
------------------------

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 are two ways to make it happen:

.. contents::
   :local:

Modifying your crontab

Here's an example of a minimal crontab::

MAILTO="[email protected]"
CONTENT_TYPE="text/html"
* * * * * root coloredlogs --to-html your-command

The coloredlogs program is installed when you install the coloredlogs Python 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 :-)

Modifying your Python code


The ColoredCronMailer_ class provides a context manager that automatically
enables HTML output when the ``$CONTENT_TYPE`` variable has been correctly set
in the crontab.

This requires my capturer_ package which you can install using ``pip install
'coloredlogs[cron]'``. The ``[cron]`` extra will pull in capturer_ 2.4 or newer
which is required to capture the output while silencing it - otherwise you'd
get duplicate output in the emails sent by ``cron``.

The context manager can also be used to retroactively silence output that has
already been produced, this can be useful to avoid spammy cron jobs that have
nothing useful to do but still email their output to the system administrator
every few minutes :-).

Contact
-------

The latest version of `coloredlogs` is available on PyPI_ and GitHub_. The
`online documentation`_ is available on Read The Docs and includes a
changelog_. For bug reports please create an issue on GitHub_. If you have
questions, suggestions, etc. feel free to send me an e-mail at
`[email protected]`_.

License
-------

This software is licensed under the `MIT license`_.

© 2020 Peter Odding.


.. External references:
.. _#16: https://github.com/xolox/python-coloredlogs/issues/16
.. _#45: https://github.com/xolox/python-coloredlogs/issues/45
.. _ANSI escape sequences: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
.. _capturer: https://pypi.org/project/capturer
.. _changelog: https://coloredlogs.readthedocs.org/en/latest/changelog.html
.. _colorama: https://pypi.org/project/colorama
.. _ColoredCronMailer: https://coloredlogs.readthedocs.io/en/latest/api.html#coloredlogs.converter.ColoredCronMailer
.. _ColoredFormatter: https://coloredlogs.readthedocs.io/en/latest/api.html#coloredlogs.ColoredFormatter
.. _coloredlogs.install(): https://coloredlogs.readthedocs.io/en/latest/api.html#coloredlogs.install
.. _cron: https://en.wikipedia.org/wiki/Cron
.. _GitHub: https://github.com/xolox/python-coloredlogs
.. _logging.basicConfig(): https://docs.python.org/2/library/logging.html#logging.basicConfig
.. _logging.Filter: https://docs.python.org/3/library/logging.html#filter-objects
.. _logging.Formatter: https://docs.python.org/2/library/logging.html#logging.Formatter
.. _logging: https://docs.python.org/2/library/logging.html
.. _MIT license: https://en.wikipedia.org/wiki/MIT_License
.. _online documentation: https://coloredlogs.readthedocs.io/
.. _per user site-packages directory: https://www.python.org/dev/peps/pep-0370/
.. [email protected]: [email protected]
.. _PyPI: https://pypi.org/project/coloredlogs
.. _release 3.0: https://coloredlogs.readthedocs.io/en/latest/changelog.html#release-3-0-2015-10-23
.. _release 7.1: https://coloredlogs.readthedocs.io/en/latest/changelog.html#release-7-1-2017-07-15
.. _release 9.3: https://coloredlogs.readthedocs.io/en/latest/changelog.html#release-9-3-2018-04-29
.. _to include 'msecs': https://stackoverflow.com/questions/6290739/python-logging-use-milliseconds-in-time-format
.. _verboselogs: https://pypi.org/project/verboselogs
.. _virtual environments: http://docs.python-guide.org/en/latest/dev/virtualenvs/
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].