logger-36 2025.5__py3-none-any.whl → 2025.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- logger_36/api/logger.py +1 -1
- logger_36/api/storage.py +1 -1
- logger_36/catalog/config/console_rich.py +2 -2
- logger_36/catalog/config/optional.py +60 -0
- logger_36/catalog/handler/console.py +11 -9
- logger_36/catalog/handler/console_rich.py +16 -15
- logger_36/catalog/handler/file.py +10 -9
- logger_36/catalog/handler/generic.py +21 -16
- logger_36/catalog/logger/gpu.py +2 -2
- logger_36/constant/error.py +1 -1
- logger_36/constant/handler.py +2 -2
- logger_36/constant/logger.py +2 -9
- logger_36/{config/logger.py → constant/path.py} +15 -46
- logger_36/content.py +3 -3
- logger_36/exception.py +47 -12
- logger_36/gpu.py +1 -1
- logger_36/handler.py +15 -18
- logger_36/memory.py +9 -6
- logger_36/storage.py +1 -1
- logger_36/system.py +1 -1
- logger_36/task/format/rule.py +4 -2
- logger_36/task/measure/memory.py +2 -2
- logger_36/task/storage.py +7 -5
- logger_36/time.py +2 -2
- logger_36/type/handler.py +20 -4
- logger_36/type/logger.py +230 -123
- logger_36/version.py +1 -1
- {logger_36-2025.5.dist-info → logger_36-2025.7.dist-info}/METADATA +1 -1
- logger_36-2025.7.dist-info/RECORD +53 -0
- logger_36-2025.5.dist-info/RECORD +0 -52
- {logger_36-2025.5.dist-info → logger_36-2025.7.dist-info}/WHEEL +0 -0
- {logger_36-2025.5.dist-info → logger_36-2025.7.dist-info}/top_level.txt +0 -0
logger_36/type/logger.py
CHANGED
@@ -7,6 +7,7 @@ SEE COPYRIGHT NOTICE BELOW
|
|
7
7
|
import dataclasses as d
|
8
8
|
import logging as l
|
9
9
|
import sys as s
|
10
|
+
import textwrap as text
|
10
11
|
import traceback as tcbk
|
11
12
|
import types as t
|
12
13
|
import typing as h
|
@@ -24,36 +25,41 @@ from logger_36.config.message import (
|
|
24
25
|
TIME_FORMAT,
|
25
26
|
)
|
26
27
|
from logger_36.constant.generic import NOT_PASSED
|
27
|
-
from logger_36.constant.handler import ANONYMOUS
|
28
|
+
from logger_36.constant.handler import ANONYMOUS, HANDLER_KINDS, handler_codes_h
|
28
29
|
from logger_36.constant.issue import ISSUE_LEVEL_SEPARATOR, ORDER, order_h
|
29
30
|
from logger_36.constant.logger import (
|
30
31
|
LOGGER_NAME,
|
31
32
|
WARNING_LOGGER_NAME,
|
32
33
|
WARNING_TYPE_COMPILED_PATTERN,
|
33
|
-
logger_handle_h,
|
34
34
|
)
|
35
35
|
from logger_36.constant.memory import UNKNOWN_MEMORY_USAGE
|
36
|
-
from logger_36.constant.message import TIME_LENGTH_m_1, expected_op_h
|
36
|
+
from logger_36.constant.message import LINE_INDENT, TIME_LENGTH_m_1, expected_op_h
|
37
|
+
from logger_36.constant.path import PROJECT_FILE_RELATIVE
|
37
38
|
from logger_36.constant.record import (
|
38
39
|
HIDE_WHERE_ATTR,
|
39
40
|
SHOW_W_RULE_ATTR,
|
40
41
|
STORE_MEMORY_ATTR,
|
41
42
|
)
|
42
43
|
from logger_36.exception import OverrideExceptionFormat
|
43
|
-
from logger_36.handler import AddRichConsoleHandler
|
44
|
+
from logger_36.handler import AddConsoleHandler, AddFileHandler, AddRichConsoleHandler
|
44
45
|
from logger_36.task.format.message import MessageWithActualExpected
|
46
|
+
from logger_36.task.format.rule import RuleAsText
|
45
47
|
from logger_36.task.measure.chronos import ElapsedTime
|
46
48
|
from logger_36.task.measure.memory import CurrentUsage as CurrentMemoryUsage
|
47
49
|
from logger_36.type.issue import NewIssue, issue_t
|
48
50
|
|
49
|
-
|
51
|
+
base_t = l.Logger
|
52
|
+
|
53
|
+
logger_handle_raw_h = h.Callable[[l.LogRecord], None]
|
54
|
+
logger_handle_with_self_h = h.Callable[[l.Logger, l.LogRecord], None]
|
55
|
+
logger_handle_h = logger_handle_raw_h | logger_handle_with_self_h
|
50
56
|
|
51
57
|
_DATE_TIME_ORIGIN = date_time_t.fromtimestamp(1970, None)
|
52
58
|
_DATE_ORIGIN = _DATE_TIME_ORIGIN.date()
|
53
59
|
|
54
60
|
|
55
61
|
@d.dataclass(slots=True, repr=False, eq=False)
|
56
|
-
class logger_t(
|
62
|
+
class logger_t(base_t):
|
57
63
|
"""
|
58
64
|
intercepted_wrn_handle: When warning interception is on, this stores the original
|
59
65
|
"handle" method of the Python warning logger.
|
@@ -81,88 +87,20 @@ class logger_t(logger_base_t):
|
|
81
87
|
init=False, default_factory=dict
|
82
88
|
)
|
83
89
|
|
84
|
-
|
85
|
-
|
86
|
-
) -> None:
|
87
|
-
""""""
|
88
|
-
logger_base_t.__init__(self, name_)
|
89
|
-
self.setLevel(level_)
|
90
|
-
self.propagate = False # Part of logger_base_t.
|
91
|
-
|
92
|
-
for level in l.getLevelNamesMapping().values():
|
93
|
-
self.events[level] = 0
|
94
|
-
|
95
|
-
if activate_wrn_interceptions:
|
96
|
-
self._ActivateWarningInterceptions()
|
97
|
-
if self.exit_on_error:
|
98
|
-
self.exit_on_critical = True
|
99
|
-
|
100
|
-
def MakeRich(self, *, alternating_lines: int = 2) -> None:
|
101
|
-
""""""
|
102
|
-
OverrideExceptionFormat()
|
103
|
-
AddRichConsoleHandler(self, alternating_lines=alternating_lines)
|
104
|
-
|
105
|
-
def ResetEventCounts(self) -> None:
|
106
|
-
""""""
|
107
|
-
for level in self.events:
|
108
|
-
self.events[level] = 0
|
109
|
-
|
110
|
-
def _ActivateWarningInterceptions(self) -> None:
|
111
|
-
"""
|
112
|
-
The log message will not appear if called from __post_init__ since there are no
|
113
|
-
handlers yet.
|
114
|
-
"""
|
115
|
-
if self.intercepted_wrn_handle is None:
|
116
|
-
logger = l.getLogger(WARNING_LOGGER_NAME)
|
117
|
-
self.intercepted_wrn_handle = logger.handle
|
118
|
-
logger.handle = t.MethodType(_HandleForWarnings(self), logger)
|
119
|
-
|
120
|
-
l.captureWarnings(True)
|
121
|
-
self.info("Warning Interception: ON")
|
122
|
-
|
123
|
-
def _DeactivateWarningInterceptions(self) -> None:
|
90
|
+
@property
|
91
|
+
def intercepts_warnings(self) -> bool:
|
124
92
|
""""""
|
125
|
-
|
126
|
-
logger = l.getLogger(WARNING_LOGGER_NAME)
|
127
|
-
logger.handle = self.intercepted_wrn_handle
|
128
|
-
self.intercepted_wrn_handle = None
|
93
|
+
return self.intercepted_wrn_handle is not None
|
129
94
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
def ToggleWarningInterceptions(self, state: bool, /) -> None:
|
95
|
+
@property
|
96
|
+
def intercepts_logs(self) -> bool:
|
134
97
|
""""""
|
135
|
-
|
136
|
-
self._ActivateWarningInterceptions()
|
137
|
-
else:
|
138
|
-
self._DeactivateWarningInterceptions()
|
98
|
+
return self.intercepted_log_handles.__len__() > 0
|
139
99
|
|
140
|
-
|
100
|
+
@property
|
101
|
+
def has_staged_issues(self) -> bool:
|
141
102
|
""""""
|
142
|
-
|
143
|
-
self.ToggleLogInterceptions(False)
|
144
|
-
|
145
|
-
all_loggers = [l.getLogger()] + [
|
146
|
-
l.getLogger(_nme)
|
147
|
-
for _nme in self.manager.loggerDict
|
148
|
-
if _nme not in (self.name, WARNING_LOGGER_NAME)
|
149
|
-
]
|
150
|
-
for logger in all_loggers:
|
151
|
-
self.intercepted_log_handles[logger.name] = logger.handle
|
152
|
-
logger.handle = t.MethodType(
|
153
|
-
_HandleForInterceptions(logger, self), logger
|
154
|
-
)
|
155
|
-
|
156
|
-
intercepted = sorted(self.intercepted_log_handles.keys())
|
157
|
-
if intercepted.__len__() > 0:
|
158
|
-
as_str = ", ".join(intercepted)
|
159
|
-
self.info(f"Now Intercepting LOGs from: {as_str}")
|
160
|
-
elif self.intercepted_log_handles.__len__() > 0:
|
161
|
-
for name, handle in self.intercepted_log_handles.items():
|
162
|
-
logger = l.getLogger(name)
|
163
|
-
logger.handle = handle
|
164
|
-
self.intercepted_log_handles.clear()
|
165
|
-
self.info("Log Interception: OFF")
|
103
|
+
return self.staged_issues.__len__() > 0
|
166
104
|
|
167
105
|
@property
|
168
106
|
def max_memory_usage(self) -> int:
|
@@ -182,29 +120,23 @@ class logger_t(logger_base_t):
|
|
182
120
|
|
183
121
|
return "?", UNKNOWN_MEMORY_USAGE
|
184
122
|
|
185
|
-
def
|
123
|
+
def __post_init__(
|
124
|
+
self, name_: str, level_: int, activate_wrn_interceptions: bool
|
125
|
+
) -> None:
|
186
126
|
""""""
|
187
|
-
self
|
188
|
-
|
127
|
+
base_t.__init__(self, name_)
|
128
|
+
self.setLevel(level_)
|
129
|
+
self.propagate = False # Part of base_t.
|
189
130
|
|
190
|
-
|
191
|
-
|
192
|
-
name = handler.name
|
193
|
-
if (name is None) or (name.__len__() == 0):
|
194
|
-
name = ANONYMOUS
|
195
|
-
else:
|
196
|
-
name = getattr(extension, "name", ANONYMOUS)
|
197
|
-
if getattr(extension, STORE_MEMORY_ATTR, False):
|
198
|
-
self.any_handler_stores_memory = True
|
131
|
+
for level in l.getLevelNamesMapping().values():
|
132
|
+
self.events[level] = 0
|
199
133
|
|
200
|
-
|
201
|
-
if isinstance(path, path_t) or (path.__len__() > 0):
|
202
|
-
path = f"\nPath: {path}"
|
134
|
+
self.info(f'New logger "{self.name}" for "{PROJECT_FILE_RELATIVE}"')
|
203
135
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
136
|
+
if activate_wrn_interceptions:
|
137
|
+
self.ToggleWarningInterceptions(True)
|
138
|
+
if self.exit_on_error:
|
139
|
+
self.exit_on_critical = True
|
208
140
|
|
209
141
|
def handle(self, record: l.LogRecord, /) -> None:
|
210
142
|
""""""
|
@@ -212,7 +144,7 @@ class logger_t(logger_base_t):
|
|
212
144
|
|
213
145
|
if (self.on_hold.__len__() > 0) and not self.should_hold_messages:
|
214
146
|
for held in self.on_hold:
|
215
|
-
|
147
|
+
base_t.handle(self, held)
|
216
148
|
self.on_hold.clear()
|
217
149
|
|
218
150
|
if (date := now.date()) != self.last_message_date:
|
@@ -229,7 +161,7 @@ class logger_t(logger_base_t):
|
|
229
161
|
if self.should_hold_messages:
|
230
162
|
self.on_hold.append(date_record)
|
231
163
|
else:
|
232
|
-
|
164
|
+
base_t.handle(self, date_record)
|
233
165
|
|
234
166
|
# When.
|
235
167
|
if now - self.last_message_now > LONG_ENOUGH:
|
@@ -271,7 +203,7 @@ class logger_t(logger_base_t):
|
|
271
203
|
if self.should_hold_messages:
|
272
204
|
self.on_hold.append(record)
|
273
205
|
else:
|
274
|
-
|
206
|
+
base_t.handle(self, record)
|
275
207
|
|
276
208
|
if (self.exit_on_critical and (record.levelno is l.CRITICAL)) or (
|
277
209
|
self.exit_on_error and (record.levelno is l.ERROR)
|
@@ -285,6 +217,177 @@ class logger_t(logger_base_t):
|
|
285
217
|
if should_store_where:
|
286
218
|
self.memory_usages.append((where, CurrentMemoryUsage()))
|
287
219
|
|
220
|
+
def SetLevel(
|
221
|
+
self,
|
222
|
+
level: int,
|
223
|
+
/,
|
224
|
+
*,
|
225
|
+
which: handler_codes_h | str = "a",
|
226
|
+
) -> None:
|
227
|
+
"""
|
228
|
+
Set level of handlers, but the logger level is not modified.
|
229
|
+
|
230
|
+
which: if not a handler_codes_h, then it corresponds to a handler name.
|
231
|
+
"""
|
232
|
+
found = False
|
233
|
+
for handler in self.handlers:
|
234
|
+
if (
|
235
|
+
(which == "a")
|
236
|
+
or ((which in "cfg") and (getattr(handler, "kind", None) == which))
|
237
|
+
or (which == handler.name)
|
238
|
+
):
|
239
|
+
handler.setLevel(level)
|
240
|
+
if which not in HANDLER_KINDS:
|
241
|
+
return
|
242
|
+
found = True
|
243
|
+
|
244
|
+
if not found:
|
245
|
+
raise ValueError(
|
246
|
+
MessageWithActualExpected(
|
247
|
+
"Handler not found",
|
248
|
+
actual=which,
|
249
|
+
expected=f"{str(HANDLER_KINDS)[1:-1]}, or a handler name",
|
250
|
+
)
|
251
|
+
)
|
252
|
+
|
253
|
+
def MakeMonochrome(
|
254
|
+
self,
|
255
|
+
*,
|
256
|
+
should_intercept_logs: bool = True,
|
257
|
+
should_override_exceptions: bool = True,
|
258
|
+
) -> None:
|
259
|
+
""""""
|
260
|
+
self._MakePreamble(
|
261
|
+
should_intercept_logs=should_intercept_logs,
|
262
|
+
should_override_exceptions=should_override_exceptions,
|
263
|
+
)
|
264
|
+
AddConsoleHandler(self)
|
265
|
+
|
266
|
+
def MakeRich(
|
267
|
+
self,
|
268
|
+
*,
|
269
|
+
alternating_lines: int = 2,
|
270
|
+
should_intercept_logs: bool = True,
|
271
|
+
should_override_exceptions: bool = True,
|
272
|
+
) -> None:
|
273
|
+
""""""
|
274
|
+
self._MakePreamble(
|
275
|
+
should_intercept_logs=should_intercept_logs,
|
276
|
+
should_override_exceptions=should_override_exceptions,
|
277
|
+
)
|
278
|
+
AddRichConsoleHandler(self, alternating_lines=alternating_lines)
|
279
|
+
|
280
|
+
def MakePermanent(
|
281
|
+
self,
|
282
|
+
path: str | path_t,
|
283
|
+
/,
|
284
|
+
*,
|
285
|
+
should_intercept_logs: bool = True,
|
286
|
+
should_override_exceptions: bool = True,
|
287
|
+
) -> None:
|
288
|
+
""""""
|
289
|
+
self._MakePreamble(
|
290
|
+
should_intercept_logs=should_intercept_logs,
|
291
|
+
should_override_exceptions=should_override_exceptions,
|
292
|
+
)
|
293
|
+
AddFileHandler(self, path)
|
294
|
+
|
295
|
+
def _MakePreamble(
|
296
|
+
self,
|
297
|
+
*,
|
298
|
+
should_intercept_logs: bool = True,
|
299
|
+
should_override_exceptions: bool = True,
|
300
|
+
) -> None:
|
301
|
+
""""""
|
302
|
+
if should_override_exceptions:
|
303
|
+
OverrideExceptionFormat()
|
304
|
+
if should_intercept_logs:
|
305
|
+
self.ToggleLogInterceptions(True)
|
306
|
+
|
307
|
+
def ResetEventCounts(self) -> None:
|
308
|
+
""""""
|
309
|
+
for level in self.events:
|
310
|
+
self.events[level] = 0
|
311
|
+
|
312
|
+
def ToggleWarningInterceptions(self, state: bool, /) -> None:
|
313
|
+
"""
|
314
|
+
The log message will not appear if called from __post_init__ since there are no
|
315
|
+
handlers yet.
|
316
|
+
"""
|
317
|
+
if state:
|
318
|
+
assert not self.intercepts_warnings
|
319
|
+
|
320
|
+
logger = l.getLogger(WARNING_LOGGER_NAME)
|
321
|
+
self.intercepted_wrn_handle = logger.handle
|
322
|
+
logger.handle = t.MethodType(_HandleForWarnings(self), logger)
|
323
|
+
|
324
|
+
l.captureWarnings(True)
|
325
|
+
self.info("Warning Interception: ON")
|
326
|
+
else:
|
327
|
+
assert self.intercepts_warnings
|
328
|
+
|
329
|
+
logger = l.getLogger(WARNING_LOGGER_NAME)
|
330
|
+
logger.handle = self.intercepted_wrn_handle
|
331
|
+
self.intercepted_wrn_handle = None
|
332
|
+
|
333
|
+
l.captureWarnings(False)
|
334
|
+
self.info("Warning Interception: OFF")
|
335
|
+
|
336
|
+
def ToggleLogInterceptions(self, state: bool, /) -> None:
|
337
|
+
""""""
|
338
|
+
if state:
|
339
|
+
assert not self.intercepts_logs
|
340
|
+
|
341
|
+
all_loggers = [l.getLogger()] + [
|
342
|
+
l.getLogger(_nme)
|
343
|
+
for _nme in self.manager.loggerDict
|
344
|
+
if _nme not in (self.name, WARNING_LOGGER_NAME)
|
345
|
+
]
|
346
|
+
for logger in all_loggers:
|
347
|
+
self.intercepted_log_handles[logger.name] = logger.handle
|
348
|
+
logger.handle = t.MethodType(
|
349
|
+
_HandleForInterceptions(logger, self), logger
|
350
|
+
)
|
351
|
+
|
352
|
+
intercepted = sorted(self.intercepted_log_handles.keys())
|
353
|
+
if intercepted.__len__() > 0:
|
354
|
+
as_str = ", ".join(intercepted)
|
355
|
+
self.info(f"Now Intercepting LOGs from: {as_str}")
|
356
|
+
else:
|
357
|
+
assert self.intercepts_logs
|
358
|
+
|
359
|
+
for name, handle in self.intercepted_log_handles.items():
|
360
|
+
logger = l.getLogger(name)
|
361
|
+
logger.handle = handle
|
362
|
+
self.intercepted_log_handles.clear()
|
363
|
+
self.info("Log Interception: OFF")
|
364
|
+
|
365
|
+
def AddHandler(
|
366
|
+
self, handler: l.Handler, /, *, should_hold_messages: bool = False
|
367
|
+
) -> None:
|
368
|
+
""""""
|
369
|
+
self.should_hold_messages = should_hold_messages
|
370
|
+
base_t.addHandler(self, handler)
|
371
|
+
|
372
|
+
extension = getattr(handler, "extension", None)
|
373
|
+
if extension is None:
|
374
|
+
name = handler.name
|
375
|
+
if (name is None) or (name.__len__() == 0):
|
376
|
+
name = ANONYMOUS
|
377
|
+
else:
|
378
|
+
name = getattr(extension, "name", ANONYMOUS)
|
379
|
+
if getattr(extension, STORE_MEMORY_ATTR, False):
|
380
|
+
self.any_handler_stores_memory = True
|
381
|
+
|
382
|
+
path = getattr(handler, "baseFilename", "")
|
383
|
+
if isinstance(path, path_t) or (path.__len__() > 0):
|
384
|
+
path = f"\nPath: {path}"
|
385
|
+
|
386
|
+
self.info(
|
387
|
+
f'New handler "{name}" of type "{type(handler).__name__}" and '
|
388
|
+
f"level {handler.level}={l.getLevelName(handler.level)}{path}",
|
389
|
+
)
|
390
|
+
|
288
391
|
def Log(
|
289
392
|
self,
|
290
393
|
message: str,
|
@@ -332,22 +435,31 @@ class logger_t(logger_base_t):
|
|
332
435
|
message = f"{type(exception).__name__}:\n{formatted}"
|
333
436
|
self.log(level, message)
|
334
437
|
|
335
|
-
def
|
438
|
+
def LogAsIs(self, message: str, /, *, indented: bool = False) -> None:
|
336
439
|
"""
|
337
440
|
See documentation of
|
338
|
-
logger_36.catalog.handler.generic.generic_handler_t.
|
441
|
+
logger_36.catalog.handler.generic.generic_handler_t.LogAsIs.
|
339
442
|
"""
|
443
|
+
if indented:
|
444
|
+
message = text.indent(message, LINE_INDENT)
|
445
|
+
|
340
446
|
for handler in self.handlers:
|
341
|
-
|
342
|
-
|
343
|
-
|
447
|
+
if (LogAsIs := getattr(handler, "LogAsIs", None)) is None:
|
448
|
+
self.info(message)
|
449
|
+
else:
|
450
|
+
LogAsIs(message)
|
451
|
+
|
452
|
+
raw_info = LogAsIs # To follow the convention of the logging methods info, error...
|
344
453
|
|
345
|
-
def DisplayRule(
|
454
|
+
def DisplayRule(
|
455
|
+
self, /, *, message: str | None = None, color: str = "white"
|
456
|
+
) -> None:
|
346
457
|
""""""
|
347
458
|
for handler in self.handlers:
|
348
|
-
DisplayRule
|
349
|
-
|
350
|
-
|
459
|
+
if (DisplayRule := getattr(handler, "DisplayRule", None)) is None:
|
460
|
+
self.info(RuleAsText(message))
|
461
|
+
else:
|
462
|
+
DisplayRule(text=message, color=color)
|
351
463
|
|
352
464
|
def AddContextLevel(self, new_level: str, /) -> None:
|
353
465
|
""""""
|
@@ -389,11 +501,6 @@ class logger_t(logger_base_t):
|
|
389
501
|
)
|
390
502
|
self.staged_issues.append(issue)
|
391
503
|
|
392
|
-
@property
|
393
|
-
def has_staged_issues(self) -> bool:
|
394
|
-
""""""
|
395
|
-
return self.staged_issues.__len__() > 0
|
396
|
-
|
397
504
|
def CommitIssues(
|
398
505
|
self,
|
399
506
|
/,
|
@@ -462,10 +569,10 @@ class logger_t(logger_base_t):
|
|
462
569
|
return False
|
463
570
|
|
464
571
|
|
465
|
-
def _HandleForWarnings(interceptor:
|
572
|
+
def _HandleForWarnings(interceptor: base_t, /) -> logger_handle_h:
|
466
573
|
""""""
|
467
574
|
|
468
|
-
def handle_p(_:
|
575
|
+
def handle_p(_: base_t, record: l.LogRecord, /) -> None:
|
469
576
|
pieces = WARNING_TYPE_COMPILED_PATTERN.match(record.msg)
|
470
577
|
if pieces is None:
|
471
578
|
# The warning message does not follow the default format.
|
@@ -491,11 +598,11 @@ def _HandleForWarnings(interceptor: logger_base_t, /) -> logger_handle_h:
|
|
491
598
|
|
492
599
|
|
493
600
|
def _HandleForInterceptions(
|
494
|
-
intercepted:
|
601
|
+
intercepted: base_t, interceptor: base_t, /
|
495
602
|
) -> logger_handle_h:
|
496
603
|
""""""
|
497
604
|
|
498
|
-
def handle_p(_:
|
605
|
+
def handle_p(_: base_t, record: l.LogRecord, /) -> None:
|
499
606
|
duplicate = l.makeLogRecord(record.__dict__)
|
500
607
|
duplicate.msg = f"{record.msg} :{intercepted.name}:"
|
501
608
|
interceptor.handle(duplicate)
|
logger_36/version.py
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
logger_36/__init__.py,sha256=3BtAgxFb14e9zzC5fXwqSQxstsd3BO0b_KVu3_wbLwg,2592
|
2
|
+
logger_36/content.py,sha256=clHYYUKa8n4qef6PVlUV4mFHRRf6fnm9wEd2fu9oagA,2381
|
3
|
+
logger_36/exception.py,sha256=BQm9maX9CMjpqN26cEsArPCcX37LqYtQSrUZ3fN8tbU,4613
|
4
|
+
logger_36/gpu.py,sha256=BOumedCAPWvCo7J-KJ3XE-jr5S0KSmgcFv_S4QKRPO8,2252
|
5
|
+
logger_36/handler.py,sha256=pIwunW-_aSB-SrdlvVmq61nOTH03deKIVcJa4Sz_hkc,6304
|
6
|
+
logger_36/memory.py,sha256=szJVk4UTXsbYv3B-W9LFttf1F3j86GXHsKgEUOsXKl4,2743
|
7
|
+
logger_36/storage.py,sha256=sCxkHQH4xMaseweK1p2M1j0j2PxNPpy9MytPdg1sKiQ,2239
|
8
|
+
logger_36/system.py,sha256=cgOMF_OneYeIJDMbIbIDx96EZss2uAdkk8QofOC7O1U,2251
|
9
|
+
logger_36/time.py,sha256=Uw1jQtY1njsRuIPRAXX44v4nPOo84MSBu_WK_YCRzQs,2324
|
10
|
+
logger_36/version.py,sha256=QWIy4Jr-I6cIfY2uS0OZkwf54A1Oh3Rxgb14HI6W6bE,2205
|
11
|
+
logger_36/api/logger.py,sha256=TE3ATbymeWX-wBKBFkVz2FxUyJnaqY7vzFwAONVsp2o,2233
|
12
|
+
logger_36/api/storage.py,sha256=KT52AGR37nsMrhKTVfG8R-Dc7lmCXjWML18cOqqCXZY,2239
|
13
|
+
logger_36/catalog/config/console_rich.py,sha256=lAa5Ev5BhXvmQzfIt1FNihMNUQJFlXaIzNanAMdgtd0,2861
|
14
|
+
logger_36/catalog/config/optional.py,sha256=HaN6mbx7gHBBppNvUw1ckhYTOrlYqb-b_r0mzPcHPjM,2398
|
15
|
+
logger_36/catalog/handler/console.py,sha256=s2DBcDK9To-wVS228RsDDPmOPxlIbVnQbZINfIK2TP0,4150
|
16
|
+
logger_36/catalog/handler/console_rich.py,sha256=pI0OE0c5I19-ycvOJjdG5vdtDXTZadNNRbKCJD-2oL4,8347
|
17
|
+
logger_36/catalog/handler/file.py,sha256=2qbsI3UHxqEm9WiCMkAm20hA2qXth2wKnakazVbwrBs,4613
|
18
|
+
logger_36/catalog/handler/generic.py,sha256=y-f6HY5xppoHYYnej0qOQT3BI0Gam_0W1_bIHCk5nn0,9212
|
19
|
+
logger_36/catalog/logger/chronos.py,sha256=ocY13f98EfknU7wZCv0FS9Xb7pTNaWCPSusXFIEvEd4,2437
|
20
|
+
logger_36/catalog/logger/gpu.py,sha256=lzrkqrMnXsszRB_TiHFqnNNI7JhNat8qL2OSlnHDe5c,3412
|
21
|
+
logger_36/catalog/logger/memory.py,sha256=CWhr2J4BqArJxzH6tS-ZThr-rYPAQGtuLn0pP7Iryfg,4685
|
22
|
+
logger_36/catalog/logger/system.py,sha256=KXP2jdPd-ACFNdA0wWdmOLwuxt4baUvXkuChyOHyfy0,3066
|
23
|
+
logger_36/config/issue.py,sha256=G-i5p6lhZCLAOa-VTMyL9ZonvGCvhdoQ5KZdSWgP-FU,2267
|
24
|
+
logger_36/config/memory.py,sha256=yCX5phsB_KJMr5xHpVUeOHFhAA7p_8yahP3X28VndOY,2217
|
25
|
+
logger_36/config/message.py,sha256=yfbMO_Jk1IbWvT6Lp6hVpID2Tr99cuiJ-ZaMBesIFXw,2527
|
26
|
+
logger_36/config/system.py,sha256=HD8ZuwsXhEAExeZrww8YoDkQGMs4T5RDqQMb1W4qVgc,2477
|
27
|
+
logger_36/constant/error.py,sha256=LzsS_P1IoH3ct_ifNWi9LzJ-X_Y5DN1naTLwwIFzDQA,2827
|
28
|
+
logger_36/constant/generic.py,sha256=t6aRb66_NHwMhR1p7BZ4QXTU2jpLz-H5YAL4PuMtKx8,2244
|
29
|
+
logger_36/constant/handler.py,sha256=PQUehMK9Yg0_rBDcMc8xpUbAsCauCLy_eS_ntiWew1Y,2378
|
30
|
+
logger_36/constant/issue.py,sha256=01l8itRPWGS5F6gXtsXUJgGR-4lS1Eu3_YeKC-khKLw,2315
|
31
|
+
logger_36/constant/logger.py,sha256=2qRkteblpbHrq9x0aiw9MPquyXrSRd6_yMQnPEhFp2U,2468
|
32
|
+
logger_36/constant/memory.py,sha256=ZL1MwbdtNsrCrOwzEyfTsfOoOsRBTJtbbf3otHGnxXo,2343
|
33
|
+
logger_36/constant/message.py,sha256=Ys_CAyhENlT8Z3rr-AxO4hjdl1jLsKzVSPQ8wqLOCPQ,2838
|
34
|
+
logger_36/constant/path.py,sha256=fKJn2vGj012BU5DFRetDFus_tKMty2q_WL0J2KrXdCo,2731
|
35
|
+
logger_36/constant/record.py,sha256=9Q28lVH_s0og4v74delgwIPAJ9G28I5rBM-brXcoY80,2308
|
36
|
+
logger_36/constant/system.py,sha256=G2mzBTxRXoJMxb53TnmBaceMJC_q3WonoCG7y6nC_R8,2430
|
37
|
+
logger_36/instance/logger.py,sha256=oTw5svRzKRJKvGrrZUtutJIOjp5UISft3fl0Ze7DOBE,2241
|
38
|
+
logger_36/instance/loggers.py,sha256=RCWpC1NPAf6vXnFc9NqsSALv-x-FEzcH6k_OlxTxeQk,2251
|
39
|
+
logger_36/task/inspection.py,sha256=KZzmQyREQ6VmBWCLyNIYIOOISW9C_fC9TWTSX90zGDk,5019
|
40
|
+
logger_36/task/storage.py,sha256=2B4OU7RqpUe98-pY9fadfnW8aFwxtsLSRGKkBtGWn-k,5686
|
41
|
+
logger_36/task/format/memory.py,sha256=jpQS8tAdxy7GM_FzqEIJUU3m-6O9iX-jiyO7gx5YwR8,4266
|
42
|
+
logger_36/task/format/message.py,sha256=T2V2gUlUQqSojyRrz4I4uAHwNe6eBEsuAe6V-LTyx0k,3867
|
43
|
+
logger_36/task/format/rule.py,sha256=vkf-HivFb4VqV2GeOPVqMAp99krtziI-kXhox3UVnzw,2873
|
44
|
+
logger_36/task/measure/chronos.py,sha256=1kVhu6jZlNAtNWQQh8ZVuRwZIAC9gGz3_ul1tn0t4Yw,3055
|
45
|
+
logger_36/task/measure/memory.py,sha256=OjU5EYFH8SnzlCQKAoiXvauUlwQYOrH34jFXTVYF0jE,2517
|
46
|
+
logger_36/type/handler.py,sha256=-myl7uBMOzkwCs1u4ehuYlQa9F6909jmnL2v_eQN5ag,6819
|
47
|
+
logger_36/type/issue.py,sha256=2rGsFqaQJCbeml9xN08mN_nK79L8qscaS_0ws36Y0bI,3214
|
48
|
+
logger_36/type/logger.py,sha256=nGNWJ5xcyA79E45qcZ-gZ3ZuY7j1aDg5NXk7VwbQVFU,22287
|
49
|
+
logger_36/type/loggers.py,sha256=znqxWBnfQxvkg3VUfbTUvt3S6Kq0DAzWWepxQDt9suI,2871
|
50
|
+
logger_36-2025.7.dist-info/METADATA,sha256=E708bS17nu3wkJZ7YTNfvezYSBUbfwXgUCwiiXwOkf0,6505
|
51
|
+
logger_36-2025.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
52
|
+
logger_36-2025.7.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
|
53
|
+
logger_36-2025.7.dist-info/RECORD,,
|
@@ -1,52 +0,0 @@
|
|
1
|
-
logger_36/__init__.py,sha256=3BtAgxFb14e9zzC5fXwqSQxstsd3BO0b_KVu3_wbLwg,2592
|
2
|
-
logger_36/content.py,sha256=ni9gdYYNZoDa91KNianWBluOBe9KxZMZtzalcBS6vhE,2357
|
3
|
-
logger_36/exception.py,sha256=CDHwCeILgCq8Z9IF0xDwd37wTczxFUTUSngtO0RCs00,3415
|
4
|
-
logger_36/gpu.py,sha256=YYFk6aYQrBDJfxQaDm-ar16T6SlOSL6jJWTOgvpF4EU,2244
|
5
|
-
logger_36/handler.py,sha256=Lle0eHQGXw86kDKhFPAsbc6VTtKAGBRY3NbgRwb22D0,6242
|
6
|
-
logger_36/memory.py,sha256=FTc3qCeMqnCNvHJ4Yds73noPENQx_U1MYB-R4LLUjVQ,2682
|
7
|
-
logger_36/storage.py,sha256=TNfIXEfHcjixv75wocUyqwX62iDYsor4srRqC3FNzbc,2231
|
8
|
-
logger_36/system.py,sha256=xzm6cMeTaCX9VX9ZRXUXgfqoT9oUtv3W2o_H2W0P-4Q,2243
|
9
|
-
logger_36/time.py,sha256=_CtpQeUZdsUNGNfwzhoWUiUvawRgmonqwZPHouzWf5M,2308
|
10
|
-
logger_36/version.py,sha256=fGumU_oHdColabh0PPq2BbbOtvjiaBGJGm7CfodTKq8,2205
|
11
|
-
logger_36/api/logger.py,sha256=Wg2nzQeuRVZ4v-oy3Q2KdYsHSzF9v7a0Fk6BzLnbkYw,2225
|
12
|
-
logger_36/api/storage.py,sha256=evKVqIsslA5X82LaZ2HQDxp7ltyNOn8Tr-3-Pic3eUo,2231
|
13
|
-
logger_36/catalog/config/console_rich.py,sha256=hp2r1bsT_Zj4c-IzL6-sPQKe0yrIKUX7IxseK-znXTo,2845
|
14
|
-
logger_36/catalog/handler/console.py,sha256=glrpWsmZsB7uZdQA0HLSKGGIz6OrvhOOiJp5XRibBNU,4226
|
15
|
-
logger_36/catalog/handler/console_rich.py,sha256=09xd50E8REu2iFtTNj0rYJfUFVxBzneqwWTmSYquiM0,8355
|
16
|
-
logger_36/catalog/handler/file.py,sha256=C6x58N2asQ4LDBTKyNBBOlIs719FeVg80PsaDjlDg04,4690
|
17
|
-
logger_36/catalog/handler/generic.py,sha256=LE2_aEMjM2sjoPN9i7E0OEulKt6f-SYAoqYZ_ugVnZc,9123
|
18
|
-
logger_36/catalog/logger/chronos.py,sha256=ocY13f98EfknU7wZCv0FS9Xb7pTNaWCPSusXFIEvEd4,2437
|
19
|
-
logger_36/catalog/logger/gpu.py,sha256=dw1eiEJurjXZBE1EhrHHR2LJbcHZ9sUSB9Z_SoJk2Ts,3407
|
20
|
-
logger_36/catalog/logger/memory.py,sha256=CWhr2J4BqArJxzH6tS-ZThr-rYPAQGtuLn0pP7Iryfg,4685
|
21
|
-
logger_36/catalog/logger/system.py,sha256=KXP2jdPd-ACFNdA0wWdmOLwuxt4baUvXkuChyOHyfy0,3066
|
22
|
-
logger_36/config/issue.py,sha256=G-i5p6lhZCLAOa-VTMyL9ZonvGCvhdoQ5KZdSWgP-FU,2267
|
23
|
-
logger_36/config/logger.py,sha256=Iiox_X1N2Ty73N-Ao0XI6dsBebXqvZd0efP3h1txYjc,3691
|
24
|
-
logger_36/config/memory.py,sha256=yCX5phsB_KJMr5xHpVUeOHFhAA7p_8yahP3X28VndOY,2217
|
25
|
-
logger_36/config/message.py,sha256=yfbMO_Jk1IbWvT6Lp6hVpID2Tr99cuiJ-ZaMBesIFXw,2527
|
26
|
-
logger_36/config/system.py,sha256=HD8ZuwsXhEAExeZrww8YoDkQGMs4T5RDqQMb1W4qVgc,2477
|
27
|
-
logger_36/constant/error.py,sha256=1gdnCwUu3d3ThL4AKxzjn7ijSTBWlr2g-8cAKbubl4A,2825
|
28
|
-
logger_36/constant/generic.py,sha256=t6aRb66_NHwMhR1p7BZ4QXTU2jpLz-H5YAL4PuMtKx8,2244
|
29
|
-
logger_36/constant/handler.py,sha256=cBf_bPB9fceCuIpzmqj345vaas-kx17YRO-rFF3Cvms,2338
|
30
|
-
logger_36/constant/issue.py,sha256=01l8itRPWGS5F6gXtsXUJgGR-4lS1Eu3_YeKC-khKLw,2315
|
31
|
-
logger_36/constant/logger.py,sha256=yorhAOTQTlIKE_51LZUhXfehrBAPfiPRJ5qJ4NA4GP8,2664
|
32
|
-
logger_36/constant/memory.py,sha256=ZL1MwbdtNsrCrOwzEyfTsfOoOsRBTJtbbf3otHGnxXo,2343
|
33
|
-
logger_36/constant/message.py,sha256=Ys_CAyhENlT8Z3rr-AxO4hjdl1jLsKzVSPQ8wqLOCPQ,2838
|
34
|
-
logger_36/constant/record.py,sha256=9Q28lVH_s0og4v74delgwIPAJ9G28I5rBM-brXcoY80,2308
|
35
|
-
logger_36/constant/system.py,sha256=G2mzBTxRXoJMxb53TnmBaceMJC_q3WonoCG7y6nC_R8,2430
|
36
|
-
logger_36/instance/logger.py,sha256=oTw5svRzKRJKvGrrZUtutJIOjp5UISft3fl0Ze7DOBE,2241
|
37
|
-
logger_36/instance/loggers.py,sha256=RCWpC1NPAf6vXnFc9NqsSALv-x-FEzcH6k_OlxTxeQk,2251
|
38
|
-
logger_36/task/inspection.py,sha256=KZzmQyREQ6VmBWCLyNIYIOOISW9C_fC9TWTSX90zGDk,5019
|
39
|
-
logger_36/task/storage.py,sha256=33Fz-7Isko_e6z9Ig9IkgDJ-NQKgkPhI4Pw3w6IlH1E,5632
|
40
|
-
logger_36/task/format/memory.py,sha256=jpQS8tAdxy7GM_FzqEIJUU3m-6O9iX-jiyO7gx5YwR8,4266
|
41
|
-
logger_36/task/format/message.py,sha256=T2V2gUlUQqSojyRrz4I4uAHwNe6eBEsuAe6V-LTyx0k,3867
|
42
|
-
logger_36/task/format/rule.py,sha256=OjNZQa_dZrH4Vhide6xm3EuV0lLC6tR1Q2_ZAxD7ito,2813
|
43
|
-
logger_36/task/measure/chronos.py,sha256=1kVhu6jZlNAtNWQQh8ZVuRwZIAC9gGz3_ul1tn0t4Yw,3055
|
44
|
-
logger_36/task/measure/memory.py,sha256=-V9UDFlDwmtUlfBzovcMgmsaYxwyoE1YmfXjXZ2iuNc,2512
|
45
|
-
logger_36/type/handler.py,sha256=_cmOyF48nMTMUspSGH-Z1iil5AzEBW9wcEeTfC8lld8,6447
|
46
|
-
logger_36/type/issue.py,sha256=2rGsFqaQJCbeml9xN08mN_nK79L8qscaS_0ws36Y0bI,3214
|
47
|
-
logger_36/type/logger.py,sha256=7NI6P5VkjMVdpirEMqIAhVADh-nOpKmKgDgHOqDSF4k,19332
|
48
|
-
logger_36/type/loggers.py,sha256=znqxWBnfQxvkg3VUfbTUvt3S6Kq0DAzWWepxQDt9suI,2871
|
49
|
-
logger_36-2025.5.dist-info/METADATA,sha256=5nalYzhNdZDZoLfFlrBBRzRkLbnBR7U7mVqcfl_vQDs,6505
|
50
|
-
logger_36-2025.5.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
51
|
-
logger_36-2025.5.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
|
52
|
-
logger_36-2025.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|