🤖 自动格式化代码 [skip ci]
This commit is contained in:
6
bot.py
6
bot.py
@@ -130,7 +130,7 @@ async def graceful_shutdown():
|
|||||||
logger.error(f"等待任务取消时发生异常: {e}")
|
logger.error(f"等待任务取消时发生异常: {e}")
|
||||||
|
|
||||||
logger.info("麦麦优雅关闭完成")
|
logger.info("麦麦优雅关闭完成")
|
||||||
|
|
||||||
# 关闭日志系统,释放文件句柄
|
# 关闭日志系统,释放文件句柄
|
||||||
shutdown_logging()
|
shutdown_logging()
|
||||||
|
|
||||||
@@ -274,13 +274,13 @@ if __name__ == "__main__":
|
|||||||
if "loop" in locals() and loop and not loop.is_closed():
|
if "loop" in locals() and loop and not loop.is_closed():
|
||||||
loop.close()
|
loop.close()
|
||||||
logger.info("事件循环已关闭")
|
logger.info("事件循环已关闭")
|
||||||
|
|
||||||
# 关闭日志系统,释放文件句柄
|
# 关闭日志系统,释放文件句柄
|
||||||
try:
|
try:
|
||||||
shutdown_logging()
|
shutdown_logging()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"关闭日志系统时出错: {e}")
|
print(f"关闭日志系统时出错: {e}")
|
||||||
|
|
||||||
# 在程序退出前暂停,让你有机会看到输出
|
# 在程序退出前暂停,让你有机会看到输出
|
||||||
# input("按 Enter 键退出...") # <--- 添加这行
|
# input("按 Enter 键退出...") # <--- 添加这行
|
||||||
sys.exit(exit_code) # <--- 使用记录的退出码
|
sys.exit(exit_code) # <--- 使用记录的退出码
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ LOG_DIR.mkdir(exist_ok=True)
|
|||||||
_file_handler = None
|
_file_handler = None
|
||||||
_console_handler = None
|
_console_handler = None
|
||||||
|
|
||||||
|
|
||||||
def get_file_handler():
|
def get_file_handler():
|
||||||
"""获取文件handler单例"""
|
"""获取文件handler单例"""
|
||||||
global _file_handler
|
global _file_handler
|
||||||
@@ -30,6 +31,7 @@ def get_file_handler():
|
|||||||
_file_handler.setLevel(getattr(logging, file_level.upper(), logging.INFO))
|
_file_handler.setLevel(getattr(logging, file_level.upper(), logging.INFO))
|
||||||
return _file_handler
|
return _file_handler
|
||||||
|
|
||||||
|
|
||||||
def get_console_handler():
|
def get_console_handler():
|
||||||
"""获取控制台handler单例"""
|
"""获取控制台handler单例"""
|
||||||
global _console_handler
|
global _console_handler
|
||||||
@@ -40,14 +42,15 @@ def get_console_handler():
|
|||||||
_console_handler.setLevel(getattr(logging, console_level.upper(), logging.INFO))
|
_console_handler.setLevel(getattr(logging, console_level.upper(), logging.INFO))
|
||||||
return _console_handler
|
return _console_handler
|
||||||
|
|
||||||
|
|
||||||
def close_handlers():
|
def close_handlers():
|
||||||
"""安全关闭所有handler"""
|
"""安全关闭所有handler"""
|
||||||
global _file_handler, _console_handler
|
global _file_handler, _console_handler
|
||||||
|
|
||||||
if _file_handler:
|
if _file_handler:
|
||||||
_file_handler.close()
|
_file_handler.close()
|
||||||
_file_handler = None
|
_file_handler = None
|
||||||
|
|
||||||
if _console_handler:
|
if _console_handler:
|
||||||
_console_handler.close()
|
_console_handler.close()
|
||||||
_console_handler = None
|
_console_handler = None
|
||||||
@@ -63,7 +66,7 @@ def load_log_config():
|
|||||||
"color_text": "title",
|
"color_text": "title",
|
||||||
"log_level": "INFO", # 全局日志级别(向下兼容)
|
"log_level": "INFO", # 全局日志级别(向下兼容)
|
||||||
"console_log_level": "INFO", # 控制台日志级别
|
"console_log_level": "INFO", # 控制台日志级别
|
||||||
"file_log_level": "DEBUG", # 文件日志级别
|
"file_log_level": "DEBUG", # 文件日志级别
|
||||||
"suppress_libraries": [],
|
"suppress_libraries": [],
|
||||||
"library_log_levels": {},
|
"library_log_levels": {},
|
||||||
}
|
}
|
||||||
@@ -107,12 +110,12 @@ def configure_third_party_loggers():
|
|||||||
# 设置根logger级别为所有handler中最低的级别,确保所有日志都能被捕获
|
# 设置根logger级别为所有handler中最低的级别,确保所有日志都能被捕获
|
||||||
console_level = LOG_CONFIG.get("console_log_level", LOG_CONFIG.get("log_level", "INFO"))
|
console_level = LOG_CONFIG.get("console_log_level", LOG_CONFIG.get("log_level", "INFO"))
|
||||||
file_level = LOG_CONFIG.get("file_log_level", LOG_CONFIG.get("log_level", "INFO"))
|
file_level = LOG_CONFIG.get("file_log_level", LOG_CONFIG.get("log_level", "INFO"))
|
||||||
|
|
||||||
# 获取最低级别(DEBUG < INFO < WARNING < ERROR < CRITICAL)
|
# 获取最低级别(DEBUG < INFO < WARNING < ERROR < CRITICAL)
|
||||||
console_level_num = getattr(logging, console_level.upper(), logging.INFO)
|
console_level_num = getattr(logging, console_level.upper(), logging.INFO)
|
||||||
file_level_num = getattr(logging, file_level.upper(), logging.INFO)
|
file_level_num = getattr(logging, file_level.upper(), logging.INFO)
|
||||||
min_level = min(console_level_num, file_level_num)
|
min_level = min(console_level_num, file_level_num)
|
||||||
|
|
||||||
root_logger = logging.getLogger()
|
root_logger = logging.getLogger()
|
||||||
root_logger.setLevel(min_level)
|
root_logger.setLevel(min_level)
|
||||||
|
|
||||||
@@ -168,7 +171,7 @@ def reconfigure_existing_loggers():
|
|||||||
original_handlers = logger_obj.handlers[:]
|
original_handlers = logger_obj.handlers[:]
|
||||||
for handler in original_handlers:
|
for handler in original_handlers:
|
||||||
# 安全关闭handler
|
# 安全关闭handler
|
||||||
if hasattr(handler, 'close'):
|
if hasattr(handler, "close"):
|
||||||
handler.close()
|
handler.close()
|
||||||
logger_obj.removeHandler(handler)
|
logger_obj.removeHandler(handler)
|
||||||
|
|
||||||
@@ -513,7 +516,7 @@ def _immediate_setup():
|
|||||||
# 使用单例handler避免重复创建
|
# 使用单例handler避免重复创建
|
||||||
file_handler = get_file_handler()
|
file_handler = get_file_handler()
|
||||||
console_handler = get_console_handler()
|
console_handler = get_console_handler()
|
||||||
|
|
||||||
# 重新添加配置好的handler
|
# 重新添加配置好的handler
|
||||||
root_logger.addHandler(file_handler)
|
root_logger.addHandler(file_handler)
|
||||||
root_logger.addHandler(console_handler)
|
root_logger.addHandler(console_handler)
|
||||||
@@ -566,7 +569,7 @@ def configure_logging(
|
|||||||
file_handler.maxBytes = max_bytes
|
file_handler.maxBytes = max_bytes
|
||||||
file_handler.backupCount = backup_count
|
file_handler.backupCount = backup_count
|
||||||
file_handler.baseFilename = str(log_path / "app.log.jsonl")
|
file_handler.baseFilename = str(log_path / "app.log.jsonl")
|
||||||
|
|
||||||
# 更新文件handler日志级别
|
# 更新文件handler日志级别
|
||||||
if file_level:
|
if file_level:
|
||||||
file_handler.setLevel(getattr(logging, file_level.upper(), logging.INFO))
|
file_handler.setLevel(getattr(logging, file_level.upper(), logging.INFO))
|
||||||
@@ -652,40 +655,40 @@ def get_log_config():
|
|||||||
|
|
||||||
def set_console_log_level(level: str):
|
def set_console_log_level(level: str):
|
||||||
"""设置控制台日志级别
|
"""设置控制台日志级别
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
level: 日志级别 ("DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL")
|
level: 日志级别 ("DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL")
|
||||||
"""
|
"""
|
||||||
global LOG_CONFIG
|
global LOG_CONFIG
|
||||||
LOG_CONFIG["console_log_level"] = level.upper()
|
LOG_CONFIG["console_log_level"] = level.upper()
|
||||||
|
|
||||||
console_handler = get_console_handler()
|
console_handler = get_console_handler()
|
||||||
if console_handler:
|
if console_handler:
|
||||||
console_handler.setLevel(getattr(logging, level.upper(), logging.INFO))
|
console_handler.setLevel(getattr(logging, level.upper(), logging.INFO))
|
||||||
|
|
||||||
# 重新设置root logger级别
|
# 重新设置root logger级别
|
||||||
configure_third_party_loggers()
|
configure_third_party_loggers()
|
||||||
|
|
||||||
logger = get_logger("logger")
|
logger = get_logger("logger")
|
||||||
logger.info(f"控制台日志级别已设置为: {level.upper()}")
|
logger.info(f"控制台日志级别已设置为: {level.upper()}")
|
||||||
|
|
||||||
|
|
||||||
def set_file_log_level(level: str):
|
def set_file_log_level(level: str):
|
||||||
"""设置文件日志级别
|
"""设置文件日志级别
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
level: 日志级别 ("DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL")
|
level: 日志级别 ("DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL")
|
||||||
"""
|
"""
|
||||||
global LOG_CONFIG
|
global LOG_CONFIG
|
||||||
LOG_CONFIG["file_log_level"] = level.upper()
|
LOG_CONFIG["file_log_level"] = level.upper()
|
||||||
|
|
||||||
file_handler = get_file_handler()
|
file_handler = get_file_handler()
|
||||||
if file_handler:
|
if file_handler:
|
||||||
file_handler.setLevel(getattr(logging, level.upper(), logging.INFO))
|
file_handler.setLevel(getattr(logging, level.upper(), logging.INFO))
|
||||||
|
|
||||||
# 重新设置root logger级别
|
# 重新设置root logger级别
|
||||||
configure_third_party_loggers()
|
configure_third_party_loggers()
|
||||||
|
|
||||||
logger = get_logger("logger")
|
logger = get_logger("logger")
|
||||||
logger.info(f"文件日志级别已设置为: {level.upper()}")
|
logger.info(f"文件日志级别已设置为: {level.upper()}")
|
||||||
|
|
||||||
@@ -694,14 +697,14 @@ def get_current_log_levels():
|
|||||||
"""获取当前的日志级别设置"""
|
"""获取当前的日志级别设置"""
|
||||||
file_handler = get_file_handler()
|
file_handler = get_file_handler()
|
||||||
console_handler = get_console_handler()
|
console_handler = get_console_handler()
|
||||||
|
|
||||||
file_level = logging.getLevelName(file_handler.level) if file_handler else "UNKNOWN"
|
file_level = logging.getLevelName(file_handler.level) if file_handler else "UNKNOWN"
|
||||||
console_level = logging.getLevelName(console_handler.level) if console_handler else "UNKNOWN"
|
console_level = logging.getLevelName(console_handler.level) if console_handler else "UNKNOWN"
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"console_level": console_level,
|
"console_level": console_level,
|
||||||
"file_level": file_level,
|
"file_level": file_level,
|
||||||
"root_level": logging.getLevelName(logging.getLogger().level)
|
"root_level": logging.getLevelName(logging.getLogger().level),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -709,7 +712,7 @@ def force_reset_all_loggers():
|
|||||||
"""强制重置所有logger,解决格式不一致问题"""
|
"""强制重置所有logger,解决格式不一致问题"""
|
||||||
# 先关闭现有的handler
|
# 先关闭现有的handler
|
||||||
close_handlers()
|
close_handlers()
|
||||||
|
|
||||||
# 清除所有现有的logger配置
|
# 清除所有现有的logger配置
|
||||||
logging.getLogger().manager.loggerDict.clear()
|
logging.getLogger().manager.loggerDict.clear()
|
||||||
|
|
||||||
@@ -720,7 +723,7 @@ def force_reset_all_loggers():
|
|||||||
# 使用单例handler避免重复创建
|
# 使用单例handler避免重复创建
|
||||||
file_handler = get_file_handler()
|
file_handler = get_file_handler()
|
||||||
console_handler = get_console_handler()
|
console_handler = get_console_handler()
|
||||||
|
|
||||||
# 重新添加我们的handler
|
# 重新添加我们的handler
|
||||||
root_logger.addHandler(file_handler)
|
root_logger.addHandler(file_handler)
|
||||||
root_logger.addHandler(console_handler)
|
root_logger.addHandler(console_handler)
|
||||||
@@ -732,11 +735,11 @@ def force_reset_all_loggers():
|
|||||||
# 设置根logger级别为所有handler中最低的级别
|
# 设置根logger级别为所有handler中最低的级别
|
||||||
console_level = LOG_CONFIG.get("console_log_level", LOG_CONFIG.get("log_level", "INFO"))
|
console_level = LOG_CONFIG.get("console_log_level", LOG_CONFIG.get("log_level", "INFO"))
|
||||||
file_level = LOG_CONFIG.get("file_log_level", LOG_CONFIG.get("log_level", "INFO"))
|
file_level = LOG_CONFIG.get("file_log_level", LOG_CONFIG.get("log_level", "INFO"))
|
||||||
|
|
||||||
console_level_num = getattr(logging, console_level.upper(), logging.INFO)
|
console_level_num = getattr(logging, console_level.upper(), logging.INFO)
|
||||||
file_level_num = getattr(logging, file_level.upper(), logging.INFO)
|
file_level_num = getattr(logging, file_level.upper(), logging.INFO)
|
||||||
min_level = min(console_level_num, file_level_num)
|
min_level = min(console_level_num, file_level_num)
|
||||||
|
|
||||||
root_logger.setLevel(min_level)
|
root_logger.setLevel(min_level)
|
||||||
|
|
||||||
|
|
||||||
@@ -815,24 +818,24 @@ def shutdown_logging():
|
|||||||
"""优雅关闭日志系统,释放所有文件句柄"""
|
"""优雅关闭日志系统,释放所有文件句柄"""
|
||||||
logger = get_logger("logger")
|
logger = get_logger("logger")
|
||||||
logger.info("正在关闭日志系统...")
|
logger.info("正在关闭日志系统...")
|
||||||
|
|
||||||
# 关闭所有handler
|
# 关闭所有handler
|
||||||
root_logger = logging.getLogger()
|
root_logger = logging.getLogger()
|
||||||
for handler in root_logger.handlers[:]:
|
for handler in root_logger.handlers[:]:
|
||||||
if hasattr(handler, 'close'):
|
if hasattr(handler, "close"):
|
||||||
handler.close()
|
handler.close()
|
||||||
root_logger.removeHandler(handler)
|
root_logger.removeHandler(handler)
|
||||||
|
|
||||||
# 关闭全局handler
|
# 关闭全局handler
|
||||||
close_handlers()
|
close_handlers()
|
||||||
|
|
||||||
# 关闭所有其他logger的handler
|
# 关闭所有其他logger的handler
|
||||||
logger_dict = logging.getLogger().manager.loggerDict
|
logger_dict = logging.getLogger().manager.loggerDict
|
||||||
for name, logger_obj in logger_dict.items():
|
for _name, logger_obj in logger_dict.items():
|
||||||
if isinstance(logger_obj, logging.Logger):
|
if isinstance(logger_obj, logging.Logger):
|
||||||
for handler in logger_obj.handlers[:]:
|
for handler in logger_obj.handlers[:]:
|
||||||
if hasattr(handler, 'close'):
|
if hasattr(handler, "close"):
|
||||||
handler.close()
|
handler.close()
|
||||||
logger_obj.removeHandler(handler)
|
logger_obj.removeHandler(handler)
|
||||||
|
|
||||||
logger.info("日志系统已关闭")
|
logger.info("日志系统已关闭")
|
||||||
|
|||||||
Reference in New Issue
Block a user