73 lines
2.6 KiB
Python
73 lines
2.6 KiB
Python
from datetime import datetime
|
|
import logging
|
|
from logging.handlers import TimedRotatingFileHandler
|
|
import sys
|
|
class AIGCLog:
|
|
def __init__(self, name="系统", log_file = "system.log"):
|
|
"""
|
|
初始化日志系统
|
|
:param name: 日志记录器名称(显示在日志中的模块名)
|
|
:param log_file: 日志文件路径
|
|
"""
|
|
self.logger = logging.getLogger(name)
|
|
self.logger.propagate = False
|
|
self.logger.setLevel(logging.DEBUG)
|
|
if not self.logger.handlers:
|
|
self.logger.handlers.clear() # 清除现有处理器
|
|
formatter = self._create_custom_formatter()
|
|
console_handler = self._create_console_handler(formatter)
|
|
file_handler = self._create_file_handler(log_file, formatter)
|
|
|
|
self.logger.addHandler(console_handler)
|
|
self.logger.addHandler(file_handler)
|
|
|
|
def _create_custom_formatter(self):
|
|
#创建自定义的日志格式
|
|
class AITimeFormatter(logging.Formatter):
|
|
def formatTime(self, record, datefmt=None):
|
|
ct = datetime.fromtimestamp(record.created)
|
|
tenth_second = int(record.msecs / 100)
|
|
return f"{ct:%Y-%m-%d %H:%M:%S}, {tenth_second}"
|
|
|
|
return AITimeFormatter(
|
|
fmt='[%(asctime)s][%(name)s] %(message)s',
|
|
datefmt='%Y-%m-%d %H:%M:%S')
|
|
|
|
def _create_console_handler(self, formatter):
|
|
#控制台输出
|
|
console_handler = logging.StreamHandler()
|
|
console_handler.setLevel(logging.DEBUG)
|
|
console_handler.setFormatter(formatter)
|
|
return console_handler
|
|
|
|
def _create_file_handler(self, log_file, formatter):
|
|
#创建文件处理爱
|
|
file_handler = TimedRotatingFileHandler(
|
|
filename=log_file,
|
|
when='midnight',
|
|
interval=1,
|
|
backupCount=7,
|
|
encoding='utf-8'
|
|
)
|
|
file_handler.setLevel(logging.DEBUG)
|
|
file_handler.setFormatter(formatter)
|
|
return file_handler
|
|
|
|
def log(self, level, msg):
|
|
if level == logging.DEBUG:
|
|
self.logger.debug(msg)
|
|
elif level == logging.INFO:
|
|
self.logger.info(msg)
|
|
elif level == logging.WARNING:
|
|
self.logger.warning(msg)
|
|
elif level == logging.ERROR:
|
|
self.logger.error(msg)
|
|
elif level == logging.CRITICAL:
|
|
self.logger.critical(msg)
|
|
else:
|
|
self.logger.info(msg) # 默认使用INFO级别
|
|
|
|
if __name__ == "__main__":
|
|
#初始化日志系统
|
|
logger = AIGCLog(name = "系统log", log_file = "system.log")
|