Python3 彩色日志包

安装

pip install colorful-logger

使用

1 默认 logger

可以直接使用默认的logger实例输出日志,默认的日志等级是warning

from colorful_logger.logger import logger

with logger:
  logger.debug("This is a debug message.")
  logger.info("This is a info message.")
  logger.warning("This is a warning message.")
  logger.error("This is a error message.")
  logger.critical("This is a critical message.")
  logger.fatal("This is a fatal message.")

如你所见,logger需要在with语句中执行,因为本包使用的是QueueListener调用日志输出,使用logger输出日志前需要调用start方法,使用结束后需要调用stop方法,我将这两个方法封装到了with语句中,非特殊场景下,不需要单独调用startstop方法。

如果调用了start方法,一定要在调用日志后后执行stop方法

default logger

2 自定义 logger

也可以自定义name、日志等级、是否在终端显示、是否保存日志到文件:

from colorful_logger.logger import get_logger, DEBUG

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

with get_logger(name="sample_logger", level=DEBUG, file_path="./test.log", file_colorful=True) as logger:
  logger.debug("This is a debug message.")
  logger.info("This is a info message.")
  logger.warning("This is a warning message.")
  logger.error("This is a error message.")
  logger.critical("This is a critical message.")
  logger.fatal("This is a fatal message.")

with语句外输出日志时可能会有意外情况,达不到预期结果。

custom logger

日志文件./test.log内容(示例,与上图信息不一致):

�[35m[DEBUG] �[0m�[34m2021-06-05 20:13:26�[0m  �[36msample_logger - �[0mThis is a debug message.
�[32m[INFO]  �[0m�[34m2021-06-05 20:13:26�[0m  �[36msample_logger - �[0mThis is a info message.
�[33m[WARN]  �[0m�[34m2021-06-05 20:13:26�[0m  �[36msample_logger - �[0mThis is a warning message.
�[31m[ERROR] �[0m�[34m2021-06-05 20:13:26�[0m  �[33mtest.py:11�[0m	�[36msample_logger - �[0mThis is a error message.
�[31m[FATAL] �[0m�[34m2021-06-05 20:13:26�[0m  �[33mtest.py:12�[0m	�[36msample_logger - �[0mThis is a critical message.
�[31m[FATAL] �[0m�[34m2021-06-05 20:13:26�[0m  �[33mtest.py:13�[0m	�[36msample_logger - �[0mThis is a fatal message.

输出到文件的日志默认不是彩色日志。

如果你需要在文件中保存彩色日志,将file_colorful参数设置为True即可,本例中保存的就是彩色日志。

彩色日志文件的作用也只有一个,就是在终端查看实时日志:

tail -f test.log
# 或
cat test.log

这样查看的日志才是彩色的。

FATALCRITICAL本就是影响程序运行的严重错误,而 python 默认的日志管理器中此方法与其他方法没有什么区别,这让我觉得莫名其妙,在本包中,我在fatal方法中加入了sys.exit(1)用来退出程序。如果在程序出现严重错误时不想退出程序,可以调用critical方法。

get_logger方法:

def get_logger(
    name: Optional[str] = None,
    level: int = logging.WARNING,
    show: bool = True,
    file_path: Optional[str] = None,
    file_colorful: bool = False,
) -> Logger: ...
  • name logger 实例名,可以在不同的实例对象调用日志时为日志命名
  • level 日志等级
  • show 是否在终端中显示。如果你想用此彩色日志包的话,通常是想在终端显示的吧
  • file_path 是否保存到文件。默认是None,当其不是None时,会保存到对应的文件中
  • file_colorful 保存到文件的日志是否为彩色,默认为 False,以 python 默认的日志格式保存

3 子 logger

定义完一个logger后,还想用此logger的除name外的所有参数输出日志,这时就需要使用child_logger方法生成子 logger,子 logger 需要在父 logger 的with语句中执行:

from colorful_logger import get_logger, child_logger
from colorful_logger.logger import DEBUG

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

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

子 logger 除了 name 与父 logger 不同,其他均相同,也不会输出第三方库的日志。

子 logger 在父 logger 的with语句中执行并不意味着一定在with语句中直接调用,在with语句中的某个函数中执行就可以,如:

# main.py
from colorful_logger import get_logger
from colorful_logger.logger import DEBUG

from other_file import test

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

with logger:
  test()
# other_file.py

test_logger = child_logger("test_logger", logger)

def test():
  test_logger.error("test error")
posted @ 2021-05-21 21:59  thepoy  阅读(278)  评论(0编辑  收藏  举报