Skip to main content

A colorful logger for python3.

Project description

Python Colorful Logger

Downloads Downloads Downloads

A colorful logger for python3.

How to use

Install

pip install colorful-logger

Usage

1 Default Logger

You can directly use the default logger. Colored logs will be printed on the terminal. The default logger level is warning.

from colorful_logger import logger

with logger:
    logger.debug("default logger")
    logger.info("default logger")
    logger.warning("default logger")
    logger.error("default logger")

logger needs to be executed inside a with statement, because this package uses QueueListener for log output. You need to call the start method before using logger to output logs, and call stop after you are done. I encapsulated these two methods inside the with statement. In most cases, there is no need to call start and stop separately.

image-20230221100744751

2 Custom Logger

You can also change the log level, save logs to a file, change the logger name, etc. Logs may not be printed to the terminal.

from colorful_logger import get_logger, DEBUG


def demo_logger(to_file=False):
    file = "test_%d.log"

    l1 = get_logger(
        "demo",
        DEBUG,
        add_file_path=False,
        disable_line_number_filter=False,
        file_path=file % 1 if to_file else None,
    )
    with l1:
        l1.debug("without file path")
        l1.info("without file path")
        l1.warning("without file path")
        l1.error("without file path")

    l2 = get_logger(
        "demo",
        DEBUG,
        add_file_path=True,
        disable_line_number_filter=False,
        file_path=file % 2 if to_file else None,
    )
    with l2:
        l2.debug("with file path")
        l2.info("with file path")
        l2.warning("with file path")
        l2.error("with file path")

    l3 = get_logger(
        None,
        DEBUG,
        add_file_path=True,
        disable_line_number_filter=True,
        file_path=file % 3 if to_file else None,
    )
    with l3:
        l3.debug("without name, and with path")
        l3.info("without name, and with path")
        l3.warning("without name, and with path")
        l3.error("without name, and with path")

    l4 = get_logger(
        None,
        DEBUG,
        add_file_path=False,
        disable_line_number_filter=True,
        file_path=file % 4 if to_file else None,
    )
    with l4:
        l4.debug("without name and path")
        l4.info("without name and path")
        l4.warning("without name and path")
        l4.error("without name and path")
        
    l5 = get_logger(None, DEBUG, asynchronous=False)
    l5.debug("Synchronization log")
    l5.info("Synchronization log")
    l5.warning("Synchronization log")
    l5.error("Synchronization log")

There may be unexpected behavior when logging outside of the with statement.

截屏2023-08-06 11.40.48

Contents of the log file ./test.log (example, inconsistent with the image above):

10:09:33.146 DEB demo:26 - without file path
10:09:33.146 INF demo - without file path
10:09:33.146 WAR demo - without file path
10:09:33.146 ERR demo:29 - without file path

The log file does not contain color logs by default.

To save color logs to a file, set file_colorful to True. In this example, color logs are saved.

The only purpose of the color log file is to view logs in real-time in the terminal:

  • Unix
tail -f test.log
# or
cat test.log
  • Windows
Get-Content -Path -Wait test.log
Synchronous

If you don't want to log asynchronously, you can create a synchronous logger by passing asynchronous=False. In the example above, l5 is a synchronous logger. When using a synchronous logger, you don't need to wrap the logs in a with statement.

3 Child Logger

After defining a logger, I want to use all the parameters of this logger except for name to output logs. You need to use the child_logger method to generate a child logger. The child logger needs to be executed inside the with statement of the parent logger:

from colorful_logger import get_logger, DEBUG

# parent logger
logger = get_logger(name="sample_logger", level=DEBUG, file_path="./test.log")

with logger:
    logger.error("parent error")
    l1 = logger.child("l1")
    l1.error("l1 error")
    l1.fatal("l1 fatal")

The child logger is the same as the parent logger except for the name. It will not log third-party libraries.

Executing the child logger inside the with statement of the parent logger does not mean it has to be called directly inside the with. It can be executed inside a function in the with statement:

# log.py
from colorful_logger import get_logger, DEBUG

logger = get_logger(name="sample_logger", level=DEBUG, file_path="./test.log")
# main.py
from log import logger
from other_file import test

with logger:
    test()
# other_file.py

test_logger = logger.child("test_logger")

def test():
    test_logger.error("test error")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

colorful-logger-0.2.0b5.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

colorful_logger-0.2.0b5-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file colorful-logger-0.2.0b5.tar.gz.

File metadata

  • Download URL: colorful-logger-0.2.0b5.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for colorful-logger-0.2.0b5.tar.gz
Algorithm Hash digest
SHA256 b1cf77a82d23f0fca7150836c1dd620b873ed682f346646af7acfac2b871e21b
MD5 0564da6199dc5d76354f9b7c570c8b1c
BLAKE2b-256 0b70ca04e71cb8d9b47adb12ddf1380165199a667f04f2c4918dd0e8c006ad58

See more details on using hashes here.

File details

Details for the file colorful_logger-0.2.0b5-py3-none-any.whl.

File metadata

File hashes

Hashes for colorful_logger-0.2.0b5-py3-none-any.whl
Algorithm Hash digest
SHA256 c51c0498fd11653a55d9831694aa302f725882d917357cca91782d7cb98358c3
MD5 d81525e44680a870459d241b8bf1bf72
BLAKE2b-256 4668cb69e496efe246db71b7910aefe0138ae980cd8a35a98b030c76cfb5d8f5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page