mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-10-04 08:16:42 +08:00

* add stable ci * fix * update * fix * rename tests dir;fix stable ci bug * add timeout limit * update
100 lines
3.4 KiB
Python
100 lines
3.4 KiB
Python
#!/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
# @author DDDivano
|
||
# encoding=utf-8 vi:ts=4:sw=4:expandtab:ft=python
|
||
"""
|
||
ServeTest
|
||
"""
|
||
import logging
|
||
import os
|
||
from datetime import datetime
|
||
|
||
import pytz
|
||
|
||
|
||
class Logger(object):
|
||
"""
|
||
日志记录配置的基础类。
|
||
"""
|
||
|
||
SAVE_LEVELS = ["both", "file", "channel"]
|
||
LOG_FORMAT = "%(asctime)s - %(name)s - [%(levelname)s] - %(message)s"
|
||
|
||
def __init__(self, loggername, save_level="both", log_path=None):
|
||
"""
|
||
使用指定名称和保存级别初始化日志记录器。
|
||
|
||
Args:
|
||
loggername (str): 日志记录器的名称。
|
||
save_level (str): 日志保存的级别。默认为"both"。file: 仅保存到文件,channel: 仅保存到控制台。
|
||
log_path (str, optional): 日志文件保存路径。默认为None。
|
||
"""
|
||
|
||
if save_level not in self.SAVE_LEVELS:
|
||
raise ValueError(f"Invalid save level: {save_level}. Allowed values: {self.SAVE_LEVELS}")
|
||
|
||
self.logger = logging.getLogger(loggername)
|
||
self.logger.setLevel(logging.DEBUG)
|
||
|
||
# 设置时区为东八区
|
||
tz = pytz.timezone("Asia/Shanghai")
|
||
|
||
# 自定义时间格式化器,指定时区为东八区
|
||
class CSTFormatter(logging.Formatter):
|
||
"""
|
||
自定义时间格式化器,指定时区为东八区
|
||
"""
|
||
|
||
def converter(self, timestamp):
|
||
"""
|
||
自定义时间转换函数,加上时区信息
|
||
Args:
|
||
timestamp (int): 时间戳。
|
||
Returns:
|
||
tuple: 格式化后的时间元组。
|
||
"""
|
||
dt = datetime.utcfromtimestamp(timestamp)
|
||
dt = pytz.utc.localize(dt).astimezone(tz)
|
||
return dt.timetuple()
|
||
|
||
formatter = CSTFormatter(self.LOG_FORMAT)
|
||
log_name = None
|
||
if save_level == "both" or save_level == "file":
|
||
os.makedirs(log_path, exist_ok=True)
|
||
log_filename = f"out_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log"
|
||
log_name = os.path.join(log_path, log_filename)
|
||
file_handler = logging.FileHandler(log_name, encoding="utf-8")
|
||
file_handler.setLevel(logging.DEBUG)
|
||
file_handler.setFormatter(formatter)
|
||
self.logger.addHandler(file_handler)
|
||
|
||
if save_level == "both" or save_level == "channel":
|
||
console_handler = logging.StreamHandler()
|
||
console_handler.setLevel(logging.DEBUG)
|
||
console_handler.setFormatter(formatter)
|
||
self.logger.addHandler(console_handler)
|
||
|
||
if log_name is None:
|
||
self.logger.info(
|
||
f"Logger initialized. Log level: {save_level}. "
|
||
f"Log path ({log_path}) is unused according to the level."
|
||
)
|
||
else:
|
||
self.logger.info(f"Logger initialized. Log level: {save_level}. Log path: {log_name}")
|
||
# Adjusting the timezone offset
|
||
|
||
def get_logger(self):
|
||
"""
|
||
Get the logger object
|
||
"""
|
||
return self.logger
|
||
|
||
|
||
if __name__ == "__main__":
|
||
# Test the logger
|
||
logger = Logger("test_logger", save_level="channel").get_logger()
|
||
logger.info("the is the beginning")
|
||
logger.debug("the is the beginning")
|
||
logger.warning("the is the beginning")
|
||
logger.error("the is the beginning")
|