mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Add HookableInMemoryHandler logging handler
This commit is contained in:
parent
6621421a6f
commit
6ee0c7600b
2
.gitignore
vendored
2
.gitignore
vendored
@ -18,7 +18,7 @@ env/
|
||||
/liberation_preferences.json
|
||||
/state.json
|
||||
|
||||
logs/
|
||||
/logs/
|
||||
|
||||
qt_ui/logs/liberation.log
|
||||
|
||||
|
||||
@ -3,6 +3,8 @@ import logging
|
||||
import os
|
||||
from logging.handlers import RotatingFileHandler
|
||||
|
||||
from qt_ui.logging_handler import HookableInMemoryHandler
|
||||
|
||||
|
||||
def init_logging(version: str) -> None:
|
||||
"""Initializes the logging configuration."""
|
||||
@ -10,13 +12,22 @@ def init_logging(version: str) -> None:
|
||||
os.mkdir("logs")
|
||||
|
||||
fmt = "%(asctime)s :: %(levelname)s :: %(message)s"
|
||||
formatter = logging.Formatter(fmt)
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG, format=fmt)
|
||||
logger = logging.getLogger()
|
||||
|
||||
handler = RotatingFileHandler("./logs/liberation.log", "a", 5000000, 1)
|
||||
handler.setLevel(logging.DEBUG)
|
||||
handler.setFormatter(logging.Formatter(fmt))
|
||||
rotating_file_handler = RotatingFileHandler(
|
||||
"./logs/liberation.log", "a", 5000000, 1
|
||||
)
|
||||
rotating_file_handler.setLevel(logging.DEBUG)
|
||||
rotating_file_handler.setFormatter(formatter)
|
||||
|
||||
logger.addHandler(handler)
|
||||
hookable_in_memory_handler = HookableInMemoryHandler()
|
||||
hookable_in_memory_handler.setLevel(logging.DEBUG)
|
||||
hookable_in_memory_handler.setFormatter(formatter)
|
||||
|
||||
logger.addHandler(rotating_file_handler)
|
||||
logger.addHandler(hookable_in_memory_handler)
|
||||
|
||||
logger.info(f"DCS Liberation {version}")
|
||||
|
||||
38
qt_ui/logging_handler.py
Normal file
38
qt_ui/logging_handler.py
Normal file
@ -0,0 +1,38 @@
|
||||
import logging
|
||||
import typing
|
||||
|
||||
LogHook = typing.Callable[[str], None]
|
||||
|
||||
|
||||
class HookableInMemoryHandler(logging.Handler):
|
||||
"""Hookable in-memory logging handler for logs window"""
|
||||
|
||||
_log: str
|
||||
_hook: typing.Optional[typing.Callable[[str], None]]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(HookableInMemoryHandler, self).__init__(*args, **kwargs)
|
||||
self._log = ""
|
||||
self._hook = None
|
||||
|
||||
@property
|
||||
def log(self) -> str:
|
||||
return self._log
|
||||
|
||||
def emit(self, record):
|
||||
msg = self.format(record)
|
||||
self._log += msg + "\n"
|
||||
if self._hook is not None:
|
||||
self._hook(msg)
|
||||
|
||||
def write(self, m):
|
||||
pass
|
||||
|
||||
def clearLog(self) -> None:
|
||||
self._log = ""
|
||||
|
||||
def setHook(self, hook: typing.Callable[[str], None]) -> None:
|
||||
self._hook = hook
|
||||
|
||||
def clearHook(self) -> None:
|
||||
self._hook = None
|
||||
Loading…
x
Reference in New Issue
Block a user