python日志

本文最后更新于:2023年8月7日 下午

被迫写了个server,为了调试需要加个日志,于是顺便有了个此文,好久没更新赶紧水一发

logging

文档

封装

logger.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import logging
from tool import read_yaml
import os

# 创建颜色格式化器
class ColorFormatter(logging.Formatter):
COLOR_CODES = {
'DEBUG': '\033[94m', # 蓝色
'INFO': '\033[92m', # 绿色
'WARNING': '\033[93m', # 黄色
'ERROR': '\033[91m', # 红色
'CRITICAL': '\033[91m', # 红色
'RESET': '\033[0m' # 重置颜色
}

def format(self, record):
log_level = record.levelname
log_message = super().format(record)
color_code = self.COLOR_CODES.get(log_level, '')
return f'{color_code}{log_message}{self.COLOR_CODES["RESET"]}'


def setup_logger(log_file,logger_name="app"):
if not os.path.exists("log"):
os.makedirs("log", exist_ok=True)

config = read_yaml("config.yaml")
# 创建日志记录器
log_file = config['base_path'] + "log/"+ log_file
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)

# 创建文件处理器
file_handler = logging.FileHandler(log_file)
file_handler.setLevel(logging.DEBUG)

# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 创建日志格式器
formatter = logging.Formatter('[%(asctime)s] - %(levelname)s - %(filename)s:%(lineno)d => %(message)s')
file_handler.setFormatter(formatter)
color_formatter = ColorFormatter('[%(asctime)s] - %(levelname)s - %(filename)s:%(lineno)d => %(message)s')
console_handler.setFormatter(color_formatter)
#console_handler.setFormatter(formatter)

# 将文件处理器和控制台处理器添加到日志记录器
logger.addHandler(file_handler)
logger.addHandler(console_handler)

return logger

使用

1
2
3
from logger import setup_logger
logger = setup_logger("flask.log","flask")
logger.info("info")
  • 添加到flask

    1
    2
    app.logger.handlers = logger.handlers
    app.logger.setLevel(logger.level)
  • 添加到fastapi

    1
    app.logger = logger

loguru

gihub源码

进过了封装,直接调用logger即可

安装包

1
pip install loguru

示例

1
2
3
4
5
from loguru import logger
logger.debug("debug")
logger.info("info")
logger.error("error")
ogger.error(f"data:{data}")
  • 保存日志:

    1
    2
    3
    4
    5
    6
    7
    from loguru import logger
    import time
    da = time.strftime("%Y-%m-%d", time.localtime())
    self.logFilePath = self.basePath + "/log/"+da+".log"
    logger.add(self.logFilePath,format="{time:YYYY-MM-DD at HH:mm:ss}|{level}|{message}",rotation="10 MB",encoding='utf-8',filter="",level="INFO")
    logger.info("存储日志:{}".format(self.logFilePath))

  • 修改显示等级

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    from loguru import logger
    import sys

    if __name__ == "__main__":
    logPath = "./log/test.log"
    logger.remove()
    # 为文件添加记录器,只记录 INFO 等级以上的日志
    logger.add(logPath, format="{time:YYYY-MM-DD at HH:mm:ss}|{level}|{message}", rotation="10 MB", encoding='utf-8', level="INFO")

    # 为控制台添加记录器,只显示 INFO 等级以上的日志
    logger.add(sys.stderr, level="INFO")

    logger.debug("这是一条 DEBUG 级别的日志,不会显示在控制台或文件中。")
    logger.info("这是一条 INFO 级别的日志,将显示在控制台并写入文件。")
    logger.error("这是一条 ERROR 级别的日志,将显示在控制台并写入文件。")

python日志
https://blog.kala.love/posts/6b3ae46f/
作者
Lissettecarlr
发布于
2021年8月31日
许可协议