2024-07-07 01:58:23 +08:00
|
|
|
|
import logging
|
2024-07-14 16:52:30 +08:00
|
|
|
|
import os
|
2024-07-07 01:58:23 +08:00
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
2025-05-20 20:49:50 +08:00
|
|
|
|
import pytz
|
|
|
|
|
|
from colorlog import ColoredFormatter
|
2024-07-07 01:58:23 +08:00
|
|
|
|
|
2025-05-20 20:49:50 +08:00
|
|
|
|
DATETIME = datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d-%H%M%S')
|
2024-08-25 20:29:24 +08:00
|
|
|
|
# DATETIME = "debug" # 为了方便,调试的时候输出到 debug.log 文件
|
2024-09-09 17:07:03 +08:00
|
|
|
|
LOG_FILE = f'saves/log/project-{DATETIME}.log'
|
2024-07-07 01:58:23 +08:00
|
|
|
|
|
2025-03-03 22:06:28 +08:00
|
|
|
|
def setup_logger(name, level=logging.DEBUG, console=True):
|
2024-09-09 17:07:03 +08:00
|
|
|
|
os.makedirs("saves/log", exist_ok=True)
|
2024-07-07 01:58:23 +08:00
|
|
|
|
|
|
|
|
|
|
"""Function to setup logger with the given name and log file."""
|
|
|
|
|
|
logger = logging.getLogger(name)
|
|
|
|
|
|
logger.setLevel(level)
|
|
|
|
|
|
|
2024-08-25 20:29:24 +08:00
|
|
|
|
# 清除已有的 Handler,防止重复添加
|
|
|
|
|
|
if logger.hasHandlers():
|
|
|
|
|
|
logger.handlers.clear()
|
|
|
|
|
|
|
2025-05-20 20:49:50 +08:00
|
|
|
|
# 文件日志(无颜色)
|
|
|
|
|
|
file_handler = logging.FileHandler(LOG_FILE, encoding='utf-8')
|
2024-07-07 01:58:23 +08:00
|
|
|
|
file_handler.setLevel(level)
|
2025-05-20 20:49:50 +08:00
|
|
|
|
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
|
|
|
|
|
|
file_handler.setFormatter(file_formatter)
|
2024-07-07 01:58:23 +08:00
|
|
|
|
logger.addHandler(file_handler)
|
|
|
|
|
|
|
2025-05-20 20:49:50 +08:00
|
|
|
|
# 控制台日志(有颜色)
|
2024-07-07 01:58:23 +08:00
|
|
|
|
if console:
|
|
|
|
|
|
console_handler = logging.StreamHandler()
|
|
|
|
|
|
console_handler.setLevel(level)
|
2025-05-20 20:49:50 +08:00
|
|
|
|
color_formatter = ColoredFormatter(
|
|
|
|
|
|
"%(log_color)s%(asctime)s - %(levelname)s - %(name)s - %(message)s",
|
|
|
|
|
|
datefmt="%Y-%m-%d %H:%M:%S",
|
|
|
|
|
|
log_colors={
|
|
|
|
|
|
'DEBUG': 'cyan',
|
|
|
|
|
|
'INFO': 'green',
|
|
|
|
|
|
'WARNING': 'yellow',
|
|
|
|
|
|
'ERROR': 'red',
|
|
|
|
|
|
'CRITICAL': 'bold_red',
|
|
|
|
|
|
}
|
|
|
|
|
|
)
|
|
|
|
|
|
console_handler.setFormatter(color_formatter)
|
2024-07-07 01:58:23 +08:00
|
|
|
|
logger.addHandler(console_handler)
|
|
|
|
|
|
|
|
|
|
|
|
return logger
|
|
|
|
|
|
|
2024-08-25 20:29:24 +08:00
|
|
|
|
|
2024-07-07 01:58:23 +08:00
|
|
|
|
# Setup the root logger
|
2024-09-14 02:45:35 +08:00
|
|
|
|
logger = setup_logger('Yuxi')
|
2024-07-07 01:58:23 +08:00
|
|
|
|
|
|
|
|
|
|
# If you want to disable logging from external libraries
|
|
|
|
|
|
# logging.getLogger('some_external_library').setLevel(logging.CRITICAL)
|