DrugDesign Data Analysis
Module of the DrugDesign project responsible for loading and pre-processing data from ChEMBL and PubChem
All Classes Namespaces Files Functions Variables Pages
verbose_logger.VerboseLogger Class Reference
Collaboration diagram for verbose_logger.VerboseLogger:

Public Member Functions

 __init__ (self, Logger logger, LogMode log_mode, int message_ljust, str exceptions_file, TextIO|TextIOWrapper standard_output=sys.stdout)
 
Any __getattr__ (self, str name)
 
 FromConfig (cls)
 
 Log (self, str level, str message, LogMode log_mode=LogMode.RETICENTLY)
 
 LogException (self, Exception exception)
 
 RestoreFormat (self, int index)
 
int UpdateFormat (self, str logger_label, str logger_color)
 

Private Member Functions

 __Configure (self, TextIO|Any|None output=None)
 
Callable __LogMethod (self, str level)
 

Private Attributes

 __colors
 
 __exceptions_file
 
 __format
 
 __labels
 
 __log_mode
 
 __logger
 
 __message_ljust
 
 __standard_output
 

Static Private Attributes

list __colors = []
 
str __exceptions_file
 
Callable __format [[dict], str]
 
list __labels = []
 
LogMode __log_mode
 
Logger __logger
 
int __message_ljust
 
TextIOWrapper __standard_output | TextIO | Any
 

Detailed Description

Реализует расширенное логирование с возможностью настройки уровня детализации, формата сообщений и записи исключений в файл.

Constructor & Destructor Documentation

◆ __init__()

verbose_logger.VerboseLogger.__init__ ( self,
Logger logger,
LogMode log_mode,
int message_ljust,
str exceptions_file,
TextIO | TextIOWrapper standard_output = sys.stdout )
Инициализирует класс VerboseLogger. Args: logger (Logger): объект логгера loguru. log_mode (LogMode): режим логирования (RETICENTLY или VERBOSELY). message_ljust (int): ширина поля для выравнивания сообщений. exceptions_file (str): путь к файлу для записи исключений. standard_output (TextIO | TextIOWrapper, optional): вывод.
57 standard_output: TextIO | TextIOWrapper = sys.stdout):
58 """
59 Инициализирует класс VerboseLogger.
60
61 Args:
62 logger (Logger): объект логгера loguru.
63 log_mode (LogMode): режим логирования (RETICENTLY или VERBOSELY).
64 message_ljust (int): ширина поля для выравнивания сообщений.
65 exceptions_file (str): путь к файлу для записи исключений.
66 standard_output (TextIO | TextIOWrapper, optional): вывод.
67 """
68
69 self.__logger = logger
70 self.__log_mode = log_mode
71
72 self.__message_ljust = message_ljust
73 self.__exceptions_file = exceptions_file
74
75 self.__standard_output = standard_output
76

Member Function Documentation

◆ __Configure()

verbose_logger.VerboseLogger.__Configure ( self,
TextIO | Any | None output = None )
private
Настраивает вывод логгера. Args: output (TextIO | Any | None, optional): поток вывода.
238 def __Configure(self,
239 output: TextIO | Any | None = None):
240 """
241 Настраивает вывод логгера.
242
243 Args:
244 output (TextIO | Any | None, optional): поток вывода.
245 """
246
247 # если вывод не задан, используем стандартный.
248 if output is None:
249 output = self.__standard_output
250
251 # удаляем предыдущие обработчики.
252 self.__logger.remove()
253 # добавляем новый обработчик с заданным форматом и выводом.
254 self.__logger.add(sink=output,
255 format=self.__format)
Here is the caller graph for this function:

◆ __getattr__()

Any verbose_logger.VerboseLogger.__getattr__ ( self,
str name )
Перехватывает обращение к атрибутам класса. Если это методы логирования (debug, info и т.д.), возвращает функцию- обертку для логирования. В противном случае, возвращает атрибут из базового логгера loguru. Args: name (str): имя атрибута. Returns: Any: атрибут или функция-обертка для логирования.
284 def __getattr__(self,
285 name: str) -> Any:
286 """
287 Перехватывает обращение к атрибутам класса.
288
289 Если это методы логирования (debug, info и т.д.), возвращает функцию-
290 обертку для логирования. В противном случае, возвращает атрибут из
291 базового логгера loguru.
292
293 Args:
294 name (str): имя атрибута.
295
296 Returns:
297 Any: атрибут или функция-обертка для логирования.
298 """
299
300 # проверяем, является ли имя одним из уровней логирования.
301 if name in [string.lower() for string in
302 loguru.logger._core.levels.keys()]: # type: ignore
303 # возвращаем обертку для метода логирования.
304 return self.__LogMethod(name)
305
306 # иначе возвращаем атрибут из базового логгера.
307 else: # другие методы loguru.logger
308 return getattr(self.__logger, name)
309
310
Here is the call graph for this function:

◆ __LogMethod()

Callable verbose_logger.VerboseLogger.__LogMethod ( self,
str level )
private
Создает функцию-обертку для логирования сообщений с определенным уровнем. Args: level (str): уровень логирования. Returns: Callable: функция-обертка для логирования.
257 def __LogMethod(self,
258 level: str) -> Callable:
259 """
260 Создает функцию-обертку для логирования сообщений с определенным уровнем.
261
262 Args:
263 level (str): уровень логирования.
264
265 Returns:
266 Callable: функция-обертка для логирования.
267 """
268
269 # получаем имя уровня в верхнем регистре.
270 level_name = level.upper()
271
272 def Wrapper(message: str = f"{"-" * (self.__message_ljust - 1)}",
273 log_mode: LogMode = LogMode.RETICENTLY):
274 # в том случае, если сообщение состоит из одного символа, превращаем в полосу.
275 if len(message) == 1:
276 message = f"{f"{message}" * (self.__message_ljust - 1)}"
277
278 # вызываем метод Log с заданным уровнем и сообщением.
279 self.Log(level_name, message, log_mode)
280
281 # возвращаем функцию-обертку.
282 return Wrapper
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FromConfig()

verbose_logger.VerboseLogger.FromConfig ( cls)
Создает экземпляр VerboseLogger на основе конфигурации. Returns: VerboseLogger: экземпляр класса.
78 def FromConfig(cls):
79 """
80 Создает экземпляр VerboseLogger на основе конфигурации.
81
82 Returns:
83 VerboseLogger: экземпляр класса.
84 """
85
86 # получаем конфигурацию для verbose логгера.
87 v_logger_config = config["Utils"]["VerboseLogger"]
88
89 # создаем и возвращаем экземпляр класса.
90 return cls(loguru.logger,
91 LogMode.VERBOSELY if v_logger_config["verbose_print"]
92 else LogMode.RETICENTLY,
93 v_logger_config["message_ljust"],
94 v_logger_config["exceptions_file"],
95 v_logger_config["exceptions_file"] if
96 v_logger_config["output_to_exceptions_file"]
97 else sys.stdout)
98

◆ Log()

verbose_logger.VerboseLogger.Log ( self,
str level,
str message,
LogMode log_mode = LogMode.RETICENTLY )
Логирует сообщение с указанным уровнем. Args: level (str): уровень логирования. message (str): сообщение для логирования. log_mode (LogMode, optional): режим логирования. Raises: NotImplementedError: если не установлен формат логгера.
213 message: str,
214 log_mode: LogMode = LogMode.RETICENTLY):
215 """
216 Логирует сообщение с указанным уровнем.
217
218 Args:
219 level (str): уровень логирования.
220 message (str): сообщение для логирования.
221 log_mode (LogMode, optional): режим логирования.
222
223 Raises:
224 NotImplementedError: если не установлен формат логгера.
225 """
226
227 # проверяем, установлен ли формат логгера.
228 if len(self.__labels) == 0:
229 raise NotImplementedError(
230 "VerboseLogger: logger format is not set. Call "
231 "'logger.UpdateFormat' first!")
232
233 # логируем сообщение, если режим логирования соответствует.
234 if self.__log_mode == LogMode.VERBOSELY or\
235 log_mode == LogMode.RETICENTLY:
236 self.__logger.log(level, message)
Here is the caller graph for this function:

◆ LogException()

verbose_logger.VerboseLogger.LogException ( self,
Exception exception )
Логирует исключение в консоль и записываем его в файл. Args: exception (Exception): объект исключения. Raises: NotImplementedError: если не установлен формат логгера.
172 exception: Exception):
173 """
174 Логирует исключение в консоль и записываем его в файл.
175
176 Args:
177 exception (Exception): объект исключения.
178
179 Raises:
180 NotImplementedError: если не установлен формат логгера.
181 """
182
183 # проверяем, установлен ли формат логгера.
184 if len(self.__labels) == 0:
185 raise NotImplementedError(
186 "VerboseLogger: logger format is not set. Call "
187 "'logger.UpdateFormat' first.")
188
189 # логируем исключение в консоль.
190 self.__logger.error(f"{exception}")
191
192 try:
193 # настраиваем логгер для записи в файл исключений.
194 self.__Configure(self.__exceptions_file)
195
196 # логируем traceback в файл исключений.
197 self.__logger.error(
198 f"{re.sub(r'"(.*?)\",\s+line\s+(\d+)',
199 r'\1:\2', traceback.format_exc())}")
200
201 # если не удалось записать исключение в файл.
202 except Exception as exception:
203 self.__logger.error(
204 "VerboseLogger: failed to write exception to file: "
205 f"{exception}.")
206
207 # в любом случае восстанавливаем исходную конфигурацию логгера.
208 finally:
209 self.__Configure()
Here is the call graph for this function:

◆ RestoreFormat()

verbose_logger.VerboseLogger.RestoreFormat ( self,
int index )
Восстанавливает формат логгера по индексу. Args: index (int): индекс одного из предыдущих форматов. Raises: NotImplementedError: если не установлен формат логгера. IndexError: если index выходит за границы.
128 def RestoreFormat(self, index: int):
129 """
130 Восстанавливает формат логгера по индексу.
131
132 Args:
133 index (int): индекс одного из предыдущих форматов.
134
135 Raises:
136 NotImplementedError: если не установлен формат логгера.
137 IndexError: если index выходит за границы.
138 """
139
140 # проверяем, установлен ли формат логгера.
141 if len(self.__labels) == 0:
142 raise NotImplementedError(
143 "VerboseLogger: logger format is not set. Call "
144 "'logger.UpdateFormat' first.")
145
146 # проверяем, не выходит ли index за границы.
147 if index >= len(self.__labels):
148 raise IndexError(
149 f"VerboseLogger: RestoreFormat: index ({index}) is out of "
150 f"range [0, {len(self.__labels) - 1}].")
151
152 # если текущий формат уже установлен, предупреждаем и выходим.
153 if index == len(self.__labels) - 1:
154 self.__logger.warning("Current format is already set.")
155 return
156
157 # задаем формат вывода.
158 self.__format = lambda record: "[{time:DD.MM.YYYY HH:mm:ss}] " +\
159 f"<{self.__colors[index]}>{self.__labels[index]}:" \
160 f"</{self.__colors[index]}> " +\
161 f"{record['message']} ".ljust(self.__message_ljust) +\
162 f"[<level>{record['level']}</level>]\n"
163
164 # обрезаем списки заголовков и цветов.
165 self.__labels = self.__labels[:index + 1]
166 self.__colors = self.__colors[:index + 1]
167
168 # настраиваем логгер.
169 self.__Configure()
170

◆ UpdateFormat()

int verbose_logger.VerboseLogger.UpdateFormat ( self,
str logger_label,
str logger_color )
Обновляет формат вывода логирования. Args: logger_label (str): текст заголовка для логирования. logger_color (str): цвет заголовка для логирования. Returns: int: индекс текущего формата.
101 logger_color: str) -> int:
102 """
103 Обновляет формат вывода логирования.
104
105 Args:
106 logger_label (str): текст заголовка для логирования.
107 logger_color (str): цвет заголовка для логирования.
108
109 Returns:
110 int: индекс текущего формата.
111 """
112
113 # задаем формат вывода.
114 self.__format = lambda record: "[{time:DD.MM.YYYY HH:mm:ss}] " +\
115 f"<{logger_color}>{logger_label}:</{logger_color}> " +\
116 f"{record['message']} ".ljust(self.__message_ljust) +\
117 f"[<level>{record['level']}</level>]\n"
118
119 # добавляем заголовок и цвет в списки.
120 self.__labels.append(logger_label)
121 self.__colors.append(logger_color)
122
123 # настраиваем логгер.
124 self.__Configure()
125
126 return len(self.__labels) - 1
127

Member Data Documentation

◆ __colors [1/2]

list verbose_logger.VerboseLogger.__colors = []
staticprivate

◆ __colors [2/2]

verbose_logger.VerboseLogger.__colors
private

◆ __exceptions_file [1/2]

str verbose_logger.VerboseLogger.__exceptions_file
staticprivate

◆ __exceptions_file [2/2]

verbose_logger.VerboseLogger.__exceptions_file
private

◆ __format [1/2]

Callable verbose_logger.VerboseLogger.__format [[dict], str]
staticprivate

◆ __format [2/2]

verbose_logger.VerboseLogger.__format
private

◆ __labels [1/2]

list verbose_logger.VerboseLogger.__labels = []
staticprivate

◆ __labels [2/2]

verbose_logger.VerboseLogger.__labels
private

◆ __log_mode [1/2]

LogMode verbose_logger.VerboseLogger.__log_mode
staticprivate

◆ __log_mode [2/2]

verbose_logger.VerboseLogger.__log_mode
private

◆ __logger [1/2]

Logger verbose_logger.VerboseLogger.__logger
staticprivate

◆ __logger [2/2]

verbose_logger.VerboseLogger.__logger
private

◆ __message_ljust [1/2]

int verbose_logger.VerboseLogger.__message_ljust
staticprivate

◆ __message_ljust [2/2]

verbose_logger.VerboseLogger.__message_ljust
private

◆ __standard_output [1/2]

TextIOWrapper verbose_logger.VerboseLogger.__standard_output | TextIO | Any
staticprivate

◆ __standard_output [2/2]

verbose_logger.VerboseLogger.__standard_output
private

The documentation for this class was generated from the following file: