Skip to content

Commit

Permalink
fix: 修复日志重叠的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
vivien8261 committed Jul 11, 2024
1 parent 0104ec2 commit 1914c99
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 16 deletions.
37 changes: 23 additions & 14 deletions amiyabot/log/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import sys
import logging

from typing import Optional
from typing import Optional, Dict
from concurrent_log_handler import ConcurrentRotatingFileHandler
from amiyabot.util import argv

Expand All @@ -17,25 +17,34 @@ class LogHandlers:
level = logging.DEBUG if debug_mode else logging.INFO
formatter = logging.Formatter(f'%(asctime)s [%(name)9s][%(levelname)9s]%(message)s')
stream_handler: Optional[logging.StreamHandler] = None
file_handlers: Dict[str, ConcurrentRotatingFileHandler] = {}

@classmethod
def get_stream_handler(cls):
def set_stream_handler(cls, logger: logging.Logger):
if not cls.stream_handler:
cls.stream_handler = logging.StreamHandler(stream=sys.stdout)
cls.stream_handler.setFormatter(cls.formatter)
cls.stream_handler.setLevel(cls.level)

return cls.stream_handler
if cls.stream_handler not in logger.handlers:
logger.addHandler(cls.stream_handler)

@classmethod
def get_file_handler(cls, save_path: str, save_filename: str):
file_handler = ConcurrentRotatingFileHandler(
filename=os.path.join(save_path, f'{save_filename}.log'),
encoding='utf-8',
maxBytes=LOG_FILE_MAX_BYTES,
backupCount=LOG_FILE_BACKUP_COUNT,
)
file_handler.setFormatter(cls.formatter)
file_handler.setLevel(cls.level)

return file_handler
def set_file_handler(cls, logger: logging.Logger, save_path: str, save_filename: str):
file_path = os.path.join(save_path, f'{save_filename}.log')
if file_path not in cls.file_handlers:
file_handler = ConcurrentRotatingFileHandler(
filename=file_path,
encoding='utf-8',
maxBytes=LOG_FILE_MAX_BYTES,
backupCount=LOG_FILE_BACKUP_COUNT,
)
file_handler.setFormatter(cls.formatter)
file_handler.setLevel(cls.level)

cls.file_handlers[file_path] = file_handler
else:
file_handler = cls.file_handlers[file_path]

if file_handler not in logger.handlers:
logger.addHandler(file_handler)
5 changes: 3 additions & 2 deletions amiyabot/log/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ def __init__(self, name: str, save_path: str = LOG_FILE_SAVE_PATH, save_filename

self.__logger = logging.getLogger(name=name)
self.__logger.setLevel(LogHandlers.level)
self.__logger.addHandler(LogHandlers.get_stream_handler())
self.__logger.addHandler(LogHandlers.get_file_handler(save_path, save_filename))

LogHandlers.set_stream_handler(self.__logger)
LogHandlers.set_file_handler(self.__logger, save_path, save_filename)

@classmethod
def use(cls, logger_cls):
Expand Down

0 comments on commit 1914c99

Please sign in to comment.