logger-36 2025.19__py3-none-any.whl → 2025.20__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/type/handler.py +1 -3
- logger_36/type/logger.py +70 -82
- logger_36/version.py +1 -1
- {logger_36-2025.19.dist-info → logger_36-2025.20.dist-info}/METADATA +1 -1
- {logger_36-2025.19.dist-info → logger_36-2025.20.dist-info}/RECORD +7 -7
- {logger_36-2025.19.dist-info → logger_36-2025.20.dist-info}/WHEEL +0 -0
- {logger_36-2025.19.dist-info → logger_36-2025.20.dist-info}/top_level.txt +0 -0
logger_36/type/handler.py
CHANGED
@@ -82,8 +82,6 @@ class extension_t:
|
|
82
82
|
if when_or_elapsed is None:
|
83
83
|
return message, True
|
84
84
|
|
85
|
-
level_first_letter = getattr(record, "level_first_letter", "")
|
86
|
-
|
87
85
|
if (where := getattr(record, "where", None)) is None:
|
88
86
|
where = ""
|
89
87
|
else:
|
@@ -91,7 +89,7 @@ class extension_t:
|
|
91
89
|
|
92
90
|
return (
|
93
91
|
f"{when_or_elapsed}"
|
94
|
-
f"{LEVEL_OPENING}{
|
92
|
+
f"{LEVEL_OPENING}{record.levelname[0]}{LEVEL_CLOSING} "
|
95
93
|
f"{MESSAGE_MARKER} {message}{where}"
|
96
94
|
), True
|
97
95
|
|
logger_36/type/logger.py
CHANGED
@@ -38,12 +38,6 @@ from logger_36.constant.memory import UNKNOWN_MEMORY_USAGE
|
|
38
38
|
from logger_36.constant.message import LINE_INDENT, TIME_LENGTH_m_1, expected_op_h
|
39
39
|
from logger_36.constant.path import PROJECT_FILE_RELATIVE, USER_FOLDER
|
40
40
|
from logger_36.constant.record import SHOW_W_RULE_ATTR, SHOW_WHERE_ATTR
|
41
|
-
from logger_36.constant.rule import (
|
42
|
-
DEFAULT_RULE,
|
43
|
-
DEFAULT_RULE_LENGTH,
|
44
|
-
MIN_HALF_RULE_LENGTH,
|
45
|
-
RULE_CHARACTER,
|
46
|
-
)
|
47
41
|
from logger_36.task.format.message import MessageWithActualExpected
|
48
42
|
from logger_36.task.measure.chronos import ElapsedTime
|
49
43
|
from logger_36.task.measure.memory import CanCheckUsage as CanCheckMemoryUsage
|
@@ -171,6 +165,9 @@ class logger_t(base_t):
|
|
171
165
|
self.setLevel(level_)
|
172
166
|
self.propagate = False # Part of base_t.
|
173
167
|
|
168
|
+
if self.should_record_messages:
|
169
|
+
self.ActivateMessageRecording()
|
170
|
+
|
174
171
|
for level_id in l.getLevelNamesMapping().values():
|
175
172
|
self.events[level_id] = 0
|
176
173
|
|
@@ -184,9 +181,6 @@ class logger_t(base_t):
|
|
184
181
|
if self.exit_on_error:
|
185
182
|
self.exit_on_critical = True
|
186
183
|
|
187
|
-
if self.should_record_messages:
|
188
|
-
self.ActivateMessageRecording()
|
189
|
-
|
190
184
|
if self.should_watch_memory_usage and not CanCheckMemoryUsage():
|
191
185
|
self.should_watch_memory_usage = False
|
192
186
|
if _MEMORY_MEASURE_ERROR is not None:
|
@@ -200,38 +194,10 @@ class logger_t(base_t):
|
|
200
194
|
elapsed_time, now = ElapsedTime(should_return_now=True)
|
201
195
|
|
202
196
|
if (self._on_hold.__len__() > 0) and not self._should_hold_messages:
|
203
|
-
|
204
|
-
if self.should_record_messages:
|
205
|
-
self.recorded.append(
|
206
|
-
(
|
207
|
-
held.levelno,
|
208
|
-
self._recording_handler.MessageFromRecord(held)[0],
|
209
|
-
)
|
210
|
-
)
|
211
|
-
base_t.handle(self, held)
|
212
|
-
self._on_hold.clear()
|
197
|
+
self._FlushRecordsOnHold()
|
213
198
|
|
214
199
|
if (date := now.date()) != self.last_message_date:
|
215
|
-
self.
|
216
|
-
date_record = l.makeLogRecord(
|
217
|
-
{
|
218
|
-
"name": self.name,
|
219
|
-
"levelno": l.INFO, # For management by logging.Logger.handle.
|
220
|
-
"msg": f"DATE: {date.strftime(DATE_FORMAT)}",
|
221
|
-
SHOW_W_RULE_ATTR: True,
|
222
|
-
}
|
223
|
-
)
|
224
|
-
if self._should_hold_messages:
|
225
|
-
self._on_hold.append(date_record)
|
226
|
-
else:
|
227
|
-
if self.should_record_messages:
|
228
|
-
self.recorded.append(
|
229
|
-
(
|
230
|
-
date_record.levelno,
|
231
|
-
self._recording_handler.MessageFromRecord(date_record)[0],
|
232
|
-
)
|
233
|
-
)
|
234
|
-
base_t.handle(self, date_record)
|
200
|
+
self._AcknowledgeDateChange(date)
|
235
201
|
|
236
202
|
# When.
|
237
203
|
if now - self.last_message_now > LONG_ENOUGH:
|
@@ -259,9 +225,6 @@ class logger_t(base_t):
|
|
259
225
|
else:
|
260
226
|
where = None
|
261
227
|
|
262
|
-
# How.
|
263
|
-
record.level_first_letter = record.levelname[0]
|
264
|
-
|
265
228
|
# What.
|
266
229
|
if not isinstance(record.msg, str):
|
267
230
|
record.msg = str(record.msg)
|
@@ -269,14 +232,11 @@ class logger_t(base_t):
|
|
269
232
|
if self._should_hold_messages:
|
270
233
|
self._on_hold.append(record)
|
271
234
|
else:
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
)
|
278
|
-
)
|
279
|
-
base_t.handle(self, record)
|
235
|
+
self._HandleRecord(record)
|
236
|
+
self.events[record.levelno] += 1
|
237
|
+
|
238
|
+
if self.should_watch_memory_usage:
|
239
|
+
self.memory_usages.append((where, CurrentMemoryUsage()))
|
280
240
|
|
281
241
|
if (self.exit_on_critical and (record.levelno is l.CRITICAL)) or (
|
282
242
|
self.exit_on_error and (record.levelno is l.ERROR)
|
@@ -285,35 +245,44 @@ class logger_t(base_t):
|
|
285
245
|
# __post_init__ set self.exit_on_critical if self.exit_on_error.
|
286
246
|
s.exit(1)
|
287
247
|
|
288
|
-
|
248
|
+
def _FlushRecordsOnHold(self) -> None:
|
249
|
+
""""""
|
250
|
+
for held in self._on_hold:
|
251
|
+
self._HandleRecord(held)
|
289
252
|
|
290
|
-
|
291
|
-
self.memory_usages.append((where, CurrentMemoryUsage()))
|
253
|
+
self._on_hold.clear()
|
292
254
|
|
293
|
-
def
|
255
|
+
def _AcknowledgeDateChange(self, date: date_t, /) -> None:
|
294
256
|
""""""
|
295
|
-
|
296
|
-
|
297
|
-
|
257
|
+
self.last_message_date = date
|
258
|
+
|
259
|
+
record = l.makeLogRecord(
|
260
|
+
{
|
261
|
+
"name": self.name,
|
262
|
+
"levelno": l.INFO, # For management by logging.Logger.handle.
|
263
|
+
"msg": f"DATE: {date.strftime(DATE_FORMAT)}",
|
264
|
+
SHOW_W_RULE_ATTR: True,
|
265
|
+
}
|
266
|
+
)
|
298
267
|
|
299
|
-
|
300
|
-
|
301
|
-
|
268
|
+
if self._should_hold_messages:
|
269
|
+
self._on_hold.append(record)
|
270
|
+
else:
|
271
|
+
self._HandleRecord(record)
|
302
272
|
|
303
|
-
def
|
273
|
+
def _HandleRecord(self, record: l.LogRecord, /) -> None:
|
304
274
|
""""""
|
305
|
-
if
|
306
|
-
|
275
|
+
if self.should_record_messages:
|
276
|
+
message = self._recording_handler.MessageFromRecord(record)[0]
|
277
|
+
self.recorded.append((record.levelno, message))
|
307
278
|
|
308
|
-
|
309
|
-
handler_kwargs = {}
|
310
|
-
else:
|
311
|
-
handler_kwargs = {"alternating_logs": alternating_logs}
|
312
|
-
self.AddHandler(console_rich_handler_t, **handler_kwargs)
|
279
|
+
base_t.handle(self, record)
|
313
280
|
|
314
|
-
def
|
281
|
+
def ActivateMessageRecording(self) -> None:
|
315
282
|
""""""
|
316
|
-
self.
|
283
|
+
self._recording_handler = handler_extension_t("recording_handler", 0, None)
|
284
|
+
self.should_record_messages = True # Useless if called from __post_init__.
|
285
|
+
self.info(f'Message recording activated for logger "{self.name}"')
|
317
286
|
|
318
287
|
def ResetEventCounts(self) -> None:
|
319
288
|
""""""
|
@@ -395,18 +364,6 @@ class logger_t(base_t):
|
|
395
364
|
self.intercepts_exceptions = False
|
396
365
|
self.info("Exception Interception: OFF")
|
397
366
|
|
398
|
-
def DealWithException(self, _, exc_value, exc_traceback, /) -> None:
|
399
|
-
""""""
|
400
|
-
exception = exc_value.with_traceback(exc_traceback)
|
401
|
-
self.LogException(exception, level=l.CRITICAL)
|
402
|
-
s.exit(1)
|
403
|
-
|
404
|
-
def DealWithExceptionInThread(
|
405
|
-
self, exc_type, exc_value, exc_traceback, _, /
|
406
|
-
) -> None:
|
407
|
-
""""""
|
408
|
-
self.DealWithException(exc_type, exc_value, exc_traceback)
|
409
|
-
|
410
367
|
def AddHandler(
|
411
368
|
self,
|
412
369
|
handler_t_or_handler: type[base_handler_t]
|
@@ -444,6 +401,25 @@ class logger_t(base_t):
|
|
444
401
|
f"level {handler.level}={l.getLevelName(handler.level)}{path}"
|
445
402
|
)
|
446
403
|
|
404
|
+
def MakeMonochrome(self) -> None:
|
405
|
+
""""""
|
406
|
+
self.AddHandler(console_handler_t)
|
407
|
+
|
408
|
+
def MakeRich(self, *, alternating_logs: int = 0) -> None:
|
409
|
+
""""""
|
410
|
+
if MISSING_RICH_MESSAGE is not None:
|
411
|
+
s.__stderr__.write(MISSING_RICH_MESSAGE + "\n")
|
412
|
+
|
413
|
+
if console_rich_handler_t is console_handler_t:
|
414
|
+
handler_kwargs = {}
|
415
|
+
else:
|
416
|
+
handler_kwargs = {"alternating_logs": alternating_logs}
|
417
|
+
self.AddHandler(console_rich_handler_t, **handler_kwargs)
|
418
|
+
|
419
|
+
def MakePermanent(self, path: str | path_t, /) -> None:
|
420
|
+
""""""
|
421
|
+
self.AddHandler(file_handler_t, path=path)
|
422
|
+
|
447
423
|
def __call__(self, *args, **kwargs) -> None:
|
448
424
|
"""
|
449
425
|
For a print-like calling for print-based debugging.
|
@@ -506,6 +482,18 @@ class logger_t(base_t):
|
|
506
482
|
message = f"Exception of type {type(exception).__name__}\n----\n{formatted}"
|
507
483
|
self.log(level, message, extra={SHOW_WHERE_ATTR: False})
|
508
484
|
|
485
|
+
def DealWithException(self, _, exc_value, exc_traceback, /) -> None:
|
486
|
+
""""""
|
487
|
+
exception = exc_value.with_traceback(exc_traceback)
|
488
|
+
self.LogException(exception, level=l.CRITICAL)
|
489
|
+
s.exit(1)
|
490
|
+
|
491
|
+
def DealWithExceptionInThread(
|
492
|
+
self, exc_type, exc_value, exc_traceback, _, /
|
493
|
+
) -> None:
|
494
|
+
""""""
|
495
|
+
self.DealWithException(exc_type, exc_value, exc_traceback)
|
496
|
+
|
509
497
|
def LogAsIs(self, message: str, /, *, indented: bool = False) -> None:
|
510
498
|
""""""
|
511
499
|
if indented:
|
logger_36/version.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
logger_36/__init__.py,sha256=mK6AD0eWI2Sk42oxleTvsxzYJ28FbHK5WNkpLgAhnNE,2129
|
2
|
-
logger_36/version.py,sha256=
|
2
|
+
logger_36/version.py,sha256=vDO1d9-QYkQ8yZUGGG46kdG9NRQx6ONSvh6-E6JGHu4,1680
|
3
3
|
logger_36/api/content.py,sha256=DuT4UX4r_1DTXzuuRD-tvsTZk5X-Nj11loBKhuWOMw0,1791
|
4
4
|
logger_36/api/gpu.py,sha256=NNs1IvQ7bh8Dppm8O8K2YLWbm4rogc3Ie_-D6xzkX3g,1726
|
5
5
|
logger_36/api/memory.py,sha256=vOY4cTTrC3u7L0OrKXdPNlsCahYjCrY4h7iqpGZv9kU,2217
|
@@ -42,11 +42,11 @@ logger_36/task/format/memory.py,sha256=J1Oy3jw8wjSp2kuiRUm_VFpzXOHX2FOc7nuRrCyrs
|
|
42
42
|
logger_36/task/format/message.py,sha256=Rm6zymVEEGcgKfmxMPXP7q3PtwZJKlXGhqZ5tnvlwxA,3502
|
43
43
|
logger_36/task/measure/chronos.py,sha256=7ijMZgP4EP18HbLV2yCxpNpRS9724Wyk523f-nkbhUM,2529
|
44
44
|
logger_36/task/measure/memory.py,sha256=kkPHEIUTUhkCOLrAt01eLJLnsnkl0nFPNhFZdIB_JAw,1991
|
45
|
-
logger_36/type/handler.py,sha256=
|
45
|
+
logger_36/type/handler.py,sha256=ChxP1j9PXLmoiNcsOdxI4bYVdr75v7HeCWp_iYJ2WNY,6602
|
46
46
|
logger_36/type/issue.py,sha256=QHAYf7QgrjJUtF2D46z6X630qTgeP_0FE5hIwf54RsE,2688
|
47
|
-
logger_36/type/logger.py,sha256=
|
47
|
+
logger_36/type/logger.py,sha256=tWdexeJT9IrxKK2NQmnHi1WVmN16xR8RNZPMc__SWBs,25447
|
48
48
|
logger_36/type/loggers.py,sha256=7EX7Sg_RlduBjdfFlNZmUfNeDloH1xU30Rdkg_-rXh8,3172
|
49
|
-
logger_36-2025.
|
50
|
-
logger_36-2025.
|
51
|
-
logger_36-2025.
|
52
|
-
logger_36-2025.
|
49
|
+
logger_36-2025.20.dist-info/METADATA,sha256=On7rI0r81M6ehWSyX7ZPiBKYVZoLqMPj-1VJWRuSd50,6529
|
50
|
+
logger_36-2025.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
51
|
+
logger_36-2025.20.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
|
52
|
+
logger_36-2025.20.dist-info/RECORD,,
|
File without changes
|
File without changes
|