thepoy 发表于 2021-5-21 15:34

Python3 的彩色日志包

本帖最后由 thepoy 于 2021-5-21 15:47 编辑

源代码很简单:https://github.com/thep0y/python-logger

## 使用方法

### 安装

```shell
pip install colorful-logger
```

### 使用

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

```python
from colorful_logger.logger import 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.fatal("This is a fatal message.")
```

!(https://cdn.jsdelivr.net/gh/thep0y/image-bed/md/1621580826694.png)

也可以自定义日志等级,保存日志到文件:

```python
import logging
from colorful_logger.logger import get_logger

# name 参数没有什么用,不需要传此参数,因为当前的日志不输出 name 字段
logger = get_logger(name="logger", level=logging.DEBUG, file_path="./test.log")

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.fatal("This is a fatal message.")
```

!(https://cdn.jsdelivr.net/gh/thep0y/image-bed/md/1621581068178.png)

日志文件`./test.log`内容

```
2021-05-21 15:08:42 test.py:8 - This is a debug message.
2021-05-21 15:08:42 test.py:9 - This is a info message.
2021-05-21 15:08:42 test.py:10 - This is a warning message.
2021-05-21 15:08:42 test.py:11 - This is a error message.
2021-05-21 15:08:42 test.py:12 - This is a fatal message.
```

输出到文件的日志没有使用彩色格式,因为我个人觉得,保存到文件中的日志没有必要是彩色的。

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

## 自定义 logger

`get_logger`方法:

```python
def get_logger(
    name: Optional = None,
    level: str = logging.WARNING,
    show: bool = True,
    file_path: Optional = None,
) -> Logger: ...
```

- *name* 对我来说没有用,以后可能会删除此参数
- *level* 日志等级
- *show* 是否在终端中显示。如果你想用此彩色日志包的话,通常是想在终端显示的吧
- *file_path* 是否保存到文件。默认是`None`,当其不是`None`时,会保存到对应的文件中

## TODO

- [ ] 改为异步日志,毕竟加入色彩后可能会影响整个程序的性能
- [ ] 改写保存文件的 formatter,使 `fatal`日志和`critical`日志分开,一个退出程序,一个不退出程序

apie 发表于 2021-5-21 17:58

这个彩色日志包的存盘格式是怎么样的?是不是通过在一些字段前后加上颜色标识来实现的(类似html标签),所以还需要用特定的一些console或文本软件才能看到彩色?

thepoy 发表于 2021-5-21 18:10

apie 发表于 2021-5-21 17:58
这个彩色日志包的存盘格式是怎么样的?是不是通过在一些字段前后加上颜色标识来实现的(类似html标签),所 ...

对,就是类似HTML标签,linux 、 Mac和 windows terminal都支持,cmd和powershell不支持。

6767 发表于 2021-5-21 19:56

https://docs.python.org/3/howto/logging.html#logging-advanced-tutorial
根据 python stdlib的logging,最好是把彩色输出做成单独包,(logger,filter,formater,handler),

顺便,logging的name默认应该是__name__;

thepoy 发表于 2021-5-21 20:40

本帖最后由 thepoy 于 2021-5-21 20:42 编辑

6767 发表于 2021-5-21 19:56
https://docs.python.org/3/howto/logging.html#logging-advanced-tutorial
根据 python stdlib的logging ...
__name__ 只是演示使 用一个 str 而已,诸多内置包都只是传入一个自定义的 str,比如 asyncio 使用 logging 时传入的就是 "asynico" 这个字符串,看看官方文档的使用示例也是一样传入的是一个自定义的 str。
当前是在默认的 Logger 基础上增加的代码,性能确实会有损失,以后有可能全部重写。
Golang 的已经重写一遍了,当前我对 Python 的 logger 的要求只是能够显示彩色,目前是满足的。

Ercilan 发表于 2021-5-21 22:46

apie 发表于 2021-5-21 17:58
这个彩色日志包的存盘格式是怎么样的?是不是通过在一些字段前后加上颜色标识来实现的(类似html标签),所 ...

[控制台终端输出颜色 - opangle - 博客园](https://www.cnblogs.com/opangle/p/4082692.html)

yoyoma211 发表于 2021-5-22 14:54

这个有点帅啊,支持了先
页: [1]
查看完整版本: Python3 的彩色日志包