BonPrinter v1.2.0
Thermal Printer tool
Loading...
Searching...
No Matches
app_log.py
Go to the documentation of this file.
1"""!
2********************************************************************************
3@file app_log.py
4@brief Logging class to store and manage log configuration
5********************************************************************************
6"""
7
8import logging
9from typing import TYPE_CHECKING
10
11from Source.version import __title__
12from Source.Util.colored_log import get_format, ColorFormatter, S_LOG_DATE_FORMAT
13from Source.Util.app_data import write_verbosity_settings
14if TYPE_CHECKING:
15 from Source.Controller.main_window import MainWindow
16
17log = logging.getLogger(__title__)
18formatter = logging.Formatter(fmt=get_format(line_no=False, threads=False), datefmt=S_LOG_DATE_FORMAT)
19color_formatter = ColorFormatter(line_no=True, threads=True, data_format=None)
20
21S_LOGGING_FILE = "app_log.log"
22
23
25 """!
26 @brief Log configuration. Supports dynamic change of log level
27 @param i_log_level : integer representing the initial log level
28 """
29
30 def __init__(self, i_log_level: int) -> None:
31 self.ui: "MainWindow | None" = None
32 self.i_log_level = i_log_level
33 self.root_logger = logging.getLogger()
34
35 # Clear existing handlers
36 self.root_logger.handlers.clear()
37
38 # initialize console handler to print log messages to stdout stream
39 console_handler = logging.StreamHandler()
40 console_handler.setFormatter(color_formatter)
41 console_handler.setLevel(self.i_log_level)
42 self.root_logger.addHandler(console_handler)
43
44 # save log messages additionally to a log file
45 file_handler = logging.FileHandler(S_LOGGING_FILE)
46 file_handler.setFormatter(formatter)
47 file_handler.setLevel(self.i_log_level)
48 self.root_logger.addHandler(file_handler)
49
50 def update_log_level(self, i_log_level: int) -> None:
51 """!
52 @brief Sets a new log level for all handlers
53 @param i_log_level : new log level
54 """
55 s_text = f"Verbosity set to {logging.getLevelName(i_log_level)}"
56 l_text = [s_text, f"Verbosität eingestellt auf {logging.getLevelName(i_log_level)}"]
57 if self.ui is not None:
58 self.ui.set_status(l_text)
59 else:
60 log.debug(s_text)
61
62 self.i_log_level = i_log_level
63 self.root_logger.setLevel(i_log_level)
64 # update log level for each log handler
65 for handler in self.root_logger.handlers:
66 handler.setLevel(i_log_level)
67 write_verbosity_settings(self.i_log_level)
Log configuration.
Definition app_log.py:24
None update_log_level(self, int i_log_level)
Sets a new log level for all handlers.
Definition app_log.py:50
None __init__(self, int i_log_level)
Definition app_log.py:30
Logging formatter that colors logging messages depending on their level.