Skip to content
Snippets Groups Projects
Verified Commit 3bece8a3 authored by Philipp Hörist's avatar Philipp Hörist
Browse files

refactor: Logging: Use separate handler for console log

parent a7c7b9d3
No related branches found
No related tags found
No related merge requests found
......@@ -77,7 +77,7 @@ bob_cache: dict[str, bytes] = {}
app = None # type: GajimApplication
window = None # type: MainWindow
commands = None # type: ChatCommands
logging_records: list[logging.LogRecord] = []
logging_records: list[str] = []
ged = ged_module.GlobalEventsDispatcher() # Global Events Dispatcher
plugin_manager = cast(types.PluginManagerT, None) # Plugins Manager
......
......@@ -27,7 +27,7 @@ from gajim.common import app
from gajim.common import configpaths
from gajim.common.i18n import _
LogCallback = Callable[[logging.LogRecord], None]
LogCallback = Callable[[str], None]
def parseLogLevel(arg: str) -> int:
......@@ -109,18 +109,19 @@ def colorize(text: str, color: str) -> str:
return color + text + Colors.NONE
class CustomStreamHandler(logging.StreamHandler): # pyright: ignore
class LogConsoleHandler(logging.StreamHandler): # pyright: ignore
def __init__(self) -> None:
super().__init__() # pyright: ignore
self._callback: LogCallback | None = None
def emit(self, record: logging.LogRecord) -> None:
super().emit(record)
if record.levelno < logging.WARNING:
return
if record.levelno >= logging.WARNING:
app.logging_records.append(record)
if self._callback is not None:
self._callback(record)
msg = self.format(record)
app.logging_records.append(msg)
if self._callback is not None:
self._callback(msg)
def set_callback(self,
func: LogCallback | None
......@@ -174,7 +175,8 @@ def init() -> None:
if os.name != 'nt':
use_color = sys.stderr.isatty()
_custom_stream_handler.setFormatter(
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(
FancyFormatter(
'%(asctime)s %(levelname)s %(name)-35s %(message)s',
'%x %H:%M:%S',
......@@ -184,22 +186,26 @@ def init() -> None:
root_log = logging.getLogger('gajim')
root_log.setLevel(logging.WARNING)
root_log.addHandler(_custom_stream_handler)
root_log.addHandler(_log_console_handler)
root_log.addHandler(stream_handler)
root_log.propagate = False
root_log = logging.getLogger('nbxmpp')
root_log.setLevel(logging.ERROR)
root_log.addHandler(_custom_stream_handler)
root_log.addHandler(_log_console_handler)
root_log.addHandler(stream_handler)
root_log.propagate = False
root_log = logging.getLogger('gnupg')
root_log.setLevel(logging.WARNING)
root_log.addHandler(_custom_stream_handler)
root_log.addHandler(_log_console_handler)
root_log.addHandler(stream_handler)
root_log.propagate = False
root_log = logging.getLogger('omemo_dr')
root_log.setLevel(logging.WARNING)
root_log.addHandler(_custom_stream_handler)
root_log.addHandler(_log_console_handler)
root_log.addHandler(stream_handler)
root_log.propagate = False
# GAJIM_DEBUG is set only on Windows when using Gajim-Debug.exe
......@@ -225,8 +231,8 @@ def set_quiet() -> None:
parseAndSetLogLevels('.omemo_dr=CRITICAL')
def get_stream_handler() -> CustomStreamHandler:
return _custom_stream_handler
def get_log_console_handler() -> LogConsoleHandler:
return _log_console_handler
def _redirect_output() -> None:
......@@ -247,7 +253,13 @@ def _cleanup_debug_logs() -> None:
file.unlink()
_custom_stream_handler = CustomStreamHandler()
_log_console_handler = LogConsoleHandler()
_log_console_handler.setFormatter(
logging.Formatter(
'%(asctime)s (%(levelname).1s) %(name)-35s | %(message)s\n',
'%x %H:%M:%S'
)
)
if __name__ == '__main__':
......
......@@ -16,7 +16,6 @@ from typing import Any
from typing import Optional
from typing import Union
import logging
import time
import nbxmpp
......@@ -34,7 +33,7 @@ from gajim.common.events import AccountEnabled
from gajim.common.events import StanzaReceived
from gajim.common.events import StanzaSent
from gajim.common.i18n import _
from gajim.common.logging_helpers import get_stream_handler
from gajim.common.logging_helpers import get_log_console_handler
from gajim.gtk.builder import get_builder
from gajim.gtk.const import Setting
......@@ -112,7 +111,7 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper):
for record in app.logging_records:
self._add_log_record(record)
log_handler = get_stream_handler()
log_handler = get_log_console_handler()
log_handler.set_callback(self._add_log_record)
self._ui.stack.connect('notify::visible-child-name',
......@@ -132,7 +131,7 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper):
])
def _on_destroy(self, *args: Any) -> None:
get_stream_handler().set_callback(None)
get_log_console_handler().set_callback(None)
self._ui.popover.destroy()
app.check_finalize(self)
......@@ -185,12 +184,10 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper):
for tag_name in tags:
self._ui.protocol_view.get_buffer().create_tag(tag_name)
def _add_log_record(self, record: logging.LogRecord) -> None:
def _add_log_record(self, message: str) -> None:
buf = self._ui.log_view.get_buffer()
msg = (f'{record.asctime} {record.levelname} {record.name} '
f'{record.getMessage()}\n')
end_iter = buf.get_end_iter()
buf.insert(end_iter, msg)
buf.insert(end_iter, message)
def _on_key_press(self, _widget: Gtk.Widget, event: Gdk.EventKey) -> None:
if event.keyval == Gdk.KEY_Escape:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment