TG-PlatformPlus/logs.py

141 lines
3.8 KiB
Python
Raw Permalink Normal View History

2026-03-02 14:29:58 +08:00
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import logging
import logging.config
2026-03-02 14:29:58 +08:00
import sys
import os
import colorlog
2026-03-02 14:29:58 +08:00
class logs():
_initialized = False
2026-03-02 14:29:58 +08:00
def __init__(self):
self.logger = logging.getLogger("TGPlatform")
2026-03-02 14:29:58 +08:00
self.fatal = self.critical
def setConfig(self, conf):
if logs._initialized:
return
# 配置验证
required_keys = ['name', 'enable', 'console', 'journal', 'level', 'when', 'backupcount']
for key in required_keys:
if key not in conf:
print(f"[日志配置错误] 缺少必填字段: {key}")
return
2026-03-02 14:29:58 +08:00
if not conf['enable']:
logs._initialized = True
return
logPath = conf.get('logpath', '')
2026-03-02 14:29:58 +08:00
if not logPath:
logPath = os.path.join(os.path.dirname(__file__), 'logFile')
try:
os.makedirs(logPath, 0o755, True)
except Exception as e:
print(f"[日志错误] 创建日志目录失败: {e}")
return
log_file = os.path.join(logPath, conf['name'])
level = conf['level'].upper()
# 构建 dictConfig
handlers = {}
handler_list = []
if conf['console']:
handlers['console'] = {
'class': 'logging.StreamHandler',
'level': level,
'formatter': 'colored',
'stream': 'ext://sys.stdout'
}
handler_list.append('console')
if conf['journal']:
handlers['file'] = {
'class': 'logging.handlers.TimedRotatingFileHandler',
'level': level,
'formatter': 'colored',
'filename': log_file,
'when': conf['when'],
'backupCount': conf['backupcount'],
'encoding': 'utf-8'
}
handler_list.append('file')
config_dict = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'colored': {
'()': 'colorlog.ColoredFormatter',
'format': '{log_color}[{asctime}]|{levelname}{message}',
'datefmt': '%m-%d %H:%M:%S',
'style': '{'
}
},
'handlers': handlers,
'loggers': {
'TGPlatform': {
'handlers': handler_list,
'level': level,
'propagate': False
}
}
}
try:
logging.config.dictConfig(config_dict)
except Exception as e:
print(f"[日志错误] 日志配置失败: {e}")
return
logs._initialized = True
2026-03-02 14:29:58 +08:00
def join(func):
def s(self, *args, **kwargs):
back_frame = sys._getframe().f_back
back_filename = os.path.basename(back_frame.f_code.co_filename)
back_lineno = back_frame.f_lineno
_args = f'[{back_filename}:{back_lineno}]'
n = '-' * (10 - len(func.__name__))
_args = f'{n}{_args}'
n = ' ' * (40 - len(func.__name__ + _args))
_args = f'{_args}{n}: '
for i in args:
_args = _args + str(i)
result = func(self, _args, **kwargs)
return result
return s
@join
def debug(self, msg):
self.logger.debug(msg)
@join
def info(self, msg):
self.logger.info(msg)
@join
def warning(self, msg):
self.logger.warning(msg)
@join
def error(self, msg):
self.logger.error(msg)
@join
def fatal(self, msg):
self.logger.critical(msg)
2026-03-02 14:29:58 +08:00
@join
def critical(self, msg):
self.logger.critical(msg)
2026-03-02 14:29:58 +08:00
log = logs()