logger-36 2025.16__py3-none-any.whl → 2025.17__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.
@@ -21,14 +21,13 @@ class console_handler_t(base_t):
21
21
  /,
22
22
  *,
23
23
  name: str | None = None,
24
- should_store_memory_usage: bool = False,
25
24
  message_width: int = -1,
26
25
  level: int = l.NOTSET,
27
26
  formatter: l.Formatter | None = None,
28
27
  **_,
29
28
  ) -> h.Self:
30
29
  """"""
31
- return cls(name, should_store_memory_usage, message_width, level, formatter)
30
+ return cls(name, message_width, level, formatter)
32
31
 
33
32
  def emit(self, record: l.LogRecord, /) -> None:
34
33
  """"""
@@ -55,7 +55,6 @@ class console_rich_handler_t(base_t):
55
55
  def __init__(
56
56
  self,
57
57
  name: str | None,
58
- should_store_memory_usage: bool,
59
58
  message_width: int,
60
59
  level: int,
61
60
  formatter: l.Formatter | None,
@@ -67,15 +66,7 @@ class console_rich_handler_t(base_t):
67
66
 
68
67
  assert alternating_logs in (0, 1, 2)
69
68
 
70
- base_t.__init__(
71
- self,
72
- name,
73
- should_store_memory_usage,
74
- message_width,
75
- level,
76
- formatter,
77
- kwargs,
78
- )
69
+ base_t.__init__(self, name, message_width, level, formatter, kwargs)
79
70
 
80
71
  self.console = None # console_t | None.
81
72
  self.alternating_logs = alternating_logs
@@ -105,16 +96,13 @@ class console_rich_handler_t(base_t):
105
96
  /,
106
97
  *,
107
98
  name: str | None = None,
108
- should_store_memory_usage: bool = False,
109
99
  message_width: int = -1,
110
100
  level: int = l.NOTSET,
111
101
  formatter: l.Formatter | None = None,
112
102
  **kwargs,
113
103
  ) -> h.Self:
114
104
  """"""
115
- return cls(
116
- name, should_store_memory_usage, message_width, level, formatter, kwargs
117
- )
105
+ return cls(name, message_width, level, formatter, kwargs)
118
106
 
119
107
  def emit(self, record: l.LogRecord, /) -> None:
120
108
  """"""
@@ -21,7 +21,6 @@ class file_handler_t(base_t):
21
21
  /,
22
22
  *,
23
23
  name: str | None = None,
24
- should_store_memory_usage: bool = False,
25
24
  message_width: int = -1,
26
25
  level: int = l.NOTSET,
27
26
  formatter: l.Formatter | None = None,
@@ -29,9 +28,7 @@ class file_handler_t(base_t):
29
28
  **_,
30
29
  ) -> h.Self:
31
30
  """"""
32
- return cls(
33
- name, should_store_memory_usage, message_width, level, formatter, path
34
- )
31
+ return cls(name, message_width, level, formatter, path)
35
32
 
36
33
  def emit(self, record: l.LogRecord, /) -> None:
37
34
  """"""
@@ -56,7 +56,6 @@ class generic_handler_t(base_t):
56
56
  def __init__(
57
57
  self,
58
58
  name: str | None,
59
- should_store_memory_usage: bool,
60
59
  message_width: int,
61
60
  level: int,
62
61
  formatter: l.Formatter | None,
@@ -69,15 +68,7 @@ class generic_handler_t(base_t):
69
68
 
70
69
  assert alternating_logs in (0, 1, 2)
71
70
 
72
- base_t.__init__(
73
- self,
74
- name,
75
- should_store_memory_usage,
76
- message_width,
77
- level,
78
- formatter,
79
- kwargs,
80
- )
71
+ base_t.__init__(self, name, message_width, level, formatter, kwargs)
81
72
 
82
73
  self.LogAsIs = LogAsIs
83
74
  self.DisplayRule = None # DisplayRule_p | None.
@@ -105,16 +96,13 @@ class generic_handler_t(base_t):
105
96
  /,
106
97
  *,
107
98
  name: str | None = None,
108
- should_store_memory_usage: bool = False,
109
99
  message_width: int = -1,
110
100
  level: int = l.NOTSET,
111
101
  formatter: l.Formatter | None = None,
112
102
  **kwargs,
113
103
  ) -> h.Self:
114
104
  """"""
115
- return cls(
116
- name, should_store_memory_usage, message_width, level, formatter, kwargs
117
- )
105
+ return cls(name, message_width, level, formatter, kwargs)
118
106
 
119
107
  def emit(self, record: l.LogRecord, /) -> None:
120
108
  """"""
@@ -21,7 +21,7 @@ def LogMemoryUsages(
21
21
  logger: logger_t = L,
22
22
  ) -> None:
23
23
  """"""
24
- if not logger.any_handler_stores_memory:
24
+ if (not hasattr(logger, "memory_usages")) or (logger.memory_usages.__len__() == 0):
25
25
  return
26
26
 
27
27
  where_s, usages = zip(*logger.memory_usages)
@@ -76,10 +76,12 @@ def LogMaximumMemoryUsage(
76
76
  """
77
77
  unit: b or None=bytes, k=kilo, m=mega, g=giga, a=auto
78
78
  """
79
- if logger.any_handler_stores_memory:
80
- where, max_usage = logger.max_memory_usage_full
81
- value, unit = FormattedUsage(max_usage, unit=unit, decimals=decimals)
82
- logger.info(f"Max. Memory Usage: {value}{unit} near {where}")
79
+ if (not hasattr(logger, "memory_usages")) or (logger.memory_usages.__len__() == 0):
80
+ return
81
+
82
+ where, max_usage = logger.max_memory_usage_full
83
+ value, unit = FormattedUsage(max_usage, unit=unit, decimals=decimals)
84
+ logger.info(f"Max. Memory Usage: {value}{unit} near {where}")
83
85
 
84
86
 
85
87
  """
@@ -9,8 +9,6 @@ import typing as h
9
9
  handler_codes_h = h.Literal["g", "c", "f", "a"] # g=generic, c=console, f=file, a=all.
10
10
  HANDLER_KINDS: tuple[str, ...] = h.get_args(handler_codes_h)
11
11
 
12
- ANONYMOUS = "<Anonymous>"
13
-
14
12
  """
15
13
  COPYRIGHT NOTICE
16
14
 
@@ -4,13 +4,13 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
4
4
  SEE COPYRIGHT NOTICE BELOW
5
5
  """
6
6
 
7
- import inspect as nspt
7
+ import inspect as e
8
8
  import tempfile as tmps
9
9
  from pathlib import Path as path_t
10
10
 
11
11
  USER_FOLDER = path_t.home()
12
12
 
13
- frame = nspt.stack()[-1]
13
+ frame = e.stack(context=0)[-1] # -1=root caller.
14
14
  if path_t(frame.filename).exists():
15
15
  PROJECT_FILE = path_t(frame.filename)
16
16
  if PROJECT_FILE.is_relative_to(USER_FOLDER):
@@ -5,8 +5,7 @@ SEE COPYRIGHT NOTICE BELOW
5
5
  """
6
6
 
7
7
  SHOW_W_RULE_ATTR = "should_show_w_rule"
8
- STORE_MEMORY_ATTR = "should_store_memory_usage"
9
- HIDE_WHERE_ATTR = "should_hide_where"
8
+ SHOW_WHERE_ATTR = "should_show_where"
10
9
 
11
10
  """
12
11
  COPYRIGHT NOTICE
logger_36/type/handler.py CHANGED
@@ -10,26 +10,22 @@ import typing as h
10
10
  from pathlib import Path as path_t
11
11
 
12
12
  from logger_36.config.message import FALLBACK_MESSAGE_WIDTH
13
- from logger_36.constant.error import MEMORY_MEASURE_ERROR
14
13
  from logger_36.constant.handler import HANDLER_KINDS
15
14
  from logger_36.task.format.message import MessageFromRecord, MessageWithActualExpected
16
15
  from logger_36.task.format.rule import RuleAsText
17
16
  from logger_36.task.measure.chronos import TimeStamp
18
- from logger_36.task.measure.memory import CanCheckUsage as CanCheckMemoryUsage
19
17
  from logger_36.type.message import MessageFromRecord_h, RuleWithText_h
20
18
 
21
- _MEMORY_MEASURE_ERROR = MEMORY_MEASURE_ERROR
22
-
23
19
 
24
20
  class _base_t:
25
21
  kind: h.ClassVar[str] = "" # See logger_36.constant.handler.handler_codes_h.
26
22
 
27
- def __init__(
28
- self, name: str | None, should_store_memory_usage: bool, message_width: int
29
- ) -> None:
23
+ def __init__(self, name: str | None, message_width: int) -> None:
30
24
  """"""
25
+ if name is None:
26
+ name = f"{type(self).__name__}:{id(self)}"
27
+
31
28
  self.name = name
32
- self.should_store_memory_usage = should_store_memory_usage
33
29
  self.message_width = message_width
34
30
  #
35
31
  self.MessageFromRecord: MessageFromRecord_h | None = None
@@ -38,8 +34,6 @@ class _base_t:
38
34
 
39
35
  def __post_init__(self) -> None:
40
36
  """"""
41
- global _MEMORY_MEASURE_ERROR
42
-
43
37
  if self.name in HANDLER_KINDS:
44
38
  raise ValueError(
45
39
  MessageWithActualExpected(
@@ -52,12 +46,6 @@ class _base_t:
52
46
  if self.name is None:
53
47
  self.name = TimeStamp()
54
48
 
55
- if self.should_store_memory_usage and not CanCheckMemoryUsage():
56
- self.should_store_memory_usage = False
57
- if _MEMORY_MEASURE_ERROR is not None:
58
- s.__stderr__.write(_MEMORY_MEASURE_ERROR + "\n")
59
- _MEMORY_MEASURE_ERROR = None
60
-
61
49
  if 0 < self.message_width < FALLBACK_MESSAGE_WIDTH:
62
50
  self.message_width = FALLBACK_MESSAGE_WIDTH
63
51
 
@@ -84,7 +72,6 @@ class handler_t(l.Handler, _base_t):
84
72
  def __init__(
85
73
  self,
86
74
  name: str | None,
87
- should_store_memory_usage: bool,
88
75
  message_width: int,
89
76
  level: int,
90
77
  formatter: l.Formatter | None,
@@ -92,7 +79,7 @@ class handler_t(l.Handler, _base_t):
92
79
  ) -> None:
93
80
  """"""
94
81
  l.Handler.__init__(self)
95
- _base_t.__init__(self, name, should_store_memory_usage, message_width)
82
+ _base_t.__init__(self, name, message_width)
96
83
  __post_init__(self, level, formatter)
97
84
 
98
85
 
@@ -100,7 +87,6 @@ class file_handler_t(l.FileHandler, _base_t):
100
87
  def __init__(
101
88
  self,
102
89
  name: str | None,
103
- should_store_memory_usage: bool,
104
90
  message_width: int,
105
91
  level: int,
106
92
  formatter: l.Formatter | None,
@@ -116,7 +102,7 @@ class file_handler_t(l.FileHandler, _base_t):
116
102
  raise ValueError(f"File or folder already exists: {path}.")
117
103
 
118
104
  l.FileHandler.__init__(self, path)
119
- _base_t.__init__(self, name, should_store_memory_usage, message_width)
105
+ _base_t.__init__(self, name, message_width)
120
106
  __post_init__(self, level, formatter)
121
107
 
122
108
 
logger_36/type/logger.py CHANGED
@@ -5,6 +5,7 @@ SEE COPYRIGHT NOTICE BELOW
5
5
  """
6
6
 
7
7
  import dataclasses as d
8
+ import inspect as e
8
9
  import logging as l
9
10
  import sys as s
10
11
  import textwrap as text
@@ -28,8 +29,9 @@ from logger_36.config.message import (
28
29
  LONG_ENOUGH,
29
30
  TIME_FORMAT,
30
31
  )
32
+ from logger_36.constant.error import MEMORY_MEASURE_ERROR
31
33
  from logger_36.constant.generic import NOT_PASSED
32
- from logger_36.constant.handler import ANONYMOUS, HANDLER_KINDS, handler_codes_h
34
+ from logger_36.constant.handler import HANDLER_KINDS, handler_codes_h
33
35
  from logger_36.constant.issue import ISSUE_LEVEL_SEPARATOR, ORDER, order_h
34
36
  from logger_36.constant.logger import (
35
37
  LOGGER_NAME,
@@ -39,14 +41,11 @@ from logger_36.constant.logger import (
39
41
  from logger_36.constant.memory import UNKNOWN_MEMORY_USAGE
40
42
  from logger_36.constant.message import LINE_INDENT, TIME_LENGTH_m_1, expected_op_h
41
43
  from logger_36.constant.path import PROJECT_FILE_RELATIVE
42
- from logger_36.constant.record import (
43
- HIDE_WHERE_ATTR,
44
- SHOW_W_RULE_ATTR,
45
- STORE_MEMORY_ATTR,
46
- )
44
+ from logger_36.constant.record import SHOW_W_RULE_ATTR, SHOW_WHERE_ATTR
47
45
  from logger_36.task.format.message import MessageFromRecord, MessageWithActualExpected
48
46
  from logger_36.task.format.rule import RuleAsText
49
47
  from logger_36.task.measure.chronos import ElapsedTime
48
+ from logger_36.task.measure.memory import CanCheckUsage as CanCheckMemoryUsage
50
49
  from logger_36.task.measure.memory import CurrentUsage as CurrentMemoryUsage
51
50
  from logger_36.type.handler import any_handler_t as base_handler_t
52
51
  from logger_36.type.issue import NewIssue, issue_t
@@ -66,6 +65,7 @@ logger_handle_h = logger_handle_raw_h | logger_handle_with_self_h
66
65
 
67
66
  _DATE_TIME_ORIGIN = date_time_t.fromtimestamp(1970, None)
68
67
  _DATE_ORIGIN = _DATE_TIME_ORIGIN.date()
68
+ _MEMORY_MEASURE_ERROR = MEMORY_MEASURE_ERROR
69
69
 
70
70
 
71
71
  @d.dataclass(slots=True, repr=False, eq=False)
@@ -85,6 +85,7 @@ class logger_t(base_t):
85
85
  """
86
86
 
87
87
  should_record_messages: bool = False
88
+ should_watch_memory_usage: bool = False
88
89
  exit_on_error: bool = False # Implies exit_on_critical.
89
90
  exit_on_critical: bool = False
90
91
 
@@ -93,7 +94,6 @@ class logger_t(base_t):
93
94
 
94
95
  last_message_now: date_time_t = d.field(init=False, default=_DATE_TIME_ORIGIN)
95
96
  last_message_date: date_t = d.field(init=False, default=_DATE_ORIGIN)
96
- any_handler_stores_memory: bool = d.field(init=False, default=False)
97
97
  memory_usages: list[tuple[str, int]] = d.field(init=False, default_factory=list)
98
98
  context_levels: list[str] = d.field(init=False, default_factory=list)
99
99
  staged_issues: list[issue_t] = d.field(init=False, default_factory=list)
@@ -159,6 +159,8 @@ class logger_t(base_t):
159
159
  activate_exc_interceptions: bool,
160
160
  ) -> None:
161
161
  """"""
162
+ global _MEMORY_MEASURE_ERROR
163
+
162
164
  base_t.__init__(self, name_)
163
165
  self.setLevel(level_)
164
166
  self.propagate = False # Part of base_t.
@@ -178,6 +180,12 @@ class logger_t(base_t):
178
180
  if self.exit_on_error:
179
181
  self.exit_on_critical = True
180
182
 
183
+ if self.should_watch_memory_usage and not CanCheckMemoryUsage():
184
+ self.should_watch_memory_usage = False
185
+ if _MEMORY_MEASURE_ERROR is not None:
186
+ s.__stderr__.write(_MEMORY_MEASURE_ERROR + "\n")
187
+ _MEMORY_MEASURE_ERROR = None
188
+
181
189
  def handle(self, record: l.LogRecord, /) -> None:
182
190
  """"""
183
191
  elapsed_time, now = ElapsedTime(should_return_now=True)
@@ -224,12 +232,8 @@ class logger_t(base_t):
224
232
  self.last_message_now = now
225
233
 
226
234
  # Where.
227
- # Memory usage is also stored if there are no handlers yet, just in case.
228
- should_store_where = self.any_handler_stores_memory or not self.hasHandlers()
229
- should_show_where = (record.levelno != l.INFO) and not hasattr(
230
- record, HIDE_WHERE_ATTR
231
- )
232
- if should_store_where or should_show_where:
235
+ should_show_where = getattr(record, SHOW_WHERE_ATTR, record.levelno != l.INFO)
236
+ if should_show_where or self.should_watch_memory_usage:
233
237
  module = path_t(record.pathname)
234
238
  for path in s.path:
235
239
  if module.is_relative_to(path):
@@ -269,7 +273,7 @@ class logger_t(base_t):
269
273
 
270
274
  self.events[record.levelno] += 1
271
275
 
272
- if should_store_where:
276
+ if self.should_watch_memory_usage:
273
277
  self.memory_usages.append((where, CurrentMemoryUsage()))
274
278
 
275
279
  def SetLevel(self, level: int, /, *, which: handler_codes_h | str = "a") -> None:
@@ -417,7 +421,6 @@ class logger_t(base_t):
417
421
  *,
418
422
  name: str | None = None,
419
423
  level: int = l.INFO,
420
- should_store_memory_usage: bool = False,
421
424
  message_width: int = -1,
422
425
  formatter: l.Formatter | None = None,
423
426
  should_still_hold_messages: bool = False,
@@ -429,9 +432,9 @@ class logger_t(base_t):
429
432
  self._should_activate_log_interceptions = False
430
433
 
431
434
  self._should_hold_messages = should_still_hold_messages
435
+
432
436
  handler = handler_t.New(
433
437
  name=name,
434
- should_store_memory_usage=should_store_memory_usage,
435
438
  message_width=message_width,
436
439
  level=level,
437
440
  formatter=formatter,
@@ -439,31 +442,26 @@ class logger_t(base_t):
439
442
  )
440
443
  base_t.addHandler(self, handler)
441
444
 
442
- extension = getattr(handler, "extension", None)
443
- if extension is None:
444
- name = handler.name
445
- if (name is None) or (name.__len__() == 0):
446
- name = ANONYMOUS
447
- else:
448
- name = getattr(extension, "name", ANONYMOUS)
449
- if getattr(extension, STORE_MEMORY_ATTR, False):
450
- self.any_handler_stores_memory = True
451
-
452
445
  path = getattr(handler, "baseFilename", "")
453
446
  if isinstance(path, path_t) or (path.__len__() > 0):
454
447
  path = f"\nPath: {path}"
455
-
456
448
  self.info(
457
- f'New handler "{name}" of type "{type(handler).__name__}" and '
449
+ f'New handler "{handler.name}" of type "{type(handler).__name__}" and '
458
450
  f"level {handler.level}={l.getLevelName(handler.level)}{path}"
459
451
  )
460
452
 
461
453
  def __call__(self, *args, **kwargs) -> None:
462
454
  """
463
- For a print-like calling.
455
+ For a print-like calling for print-based debugging.
464
456
  """
457
+ frame = e.stack(context=0)[1][0] # 1=caller.
458
+ details = e.getframeinfo(frame, context=0)
459
+ path = path_t(details.filename).relative_to(path_t.home())
460
+ where = f"{str(path)[:-3]}.{details.function}.{details.lineno}"
461
+
465
462
  separator = kwargs.get("separator", " ")
466
- self.info(separator.join(map(str, args)))
463
+
464
+ self.info(where + "\n" + separator.join(map(str, args)))
467
465
 
468
466
  def Log(
469
467
  self,
@@ -510,7 +508,7 @@ class logger_t(base_t):
510
508
  # - Why adding exception name here and not when removing caller?
511
509
  formatted = "".join(lines)
512
510
  message = f"Exception of type {type(exception).__name__}\n----\n{formatted}"
513
- self.log(level, message, extra={HIDE_WHERE_ATTR: None})
511
+ self.log(level, message, extra={SHOW_WHERE_ATTR: False})
514
512
 
515
513
  def LogAsIs(self, message: str, /, *, indented: bool = False) -> None:
516
514
  """"""
@@ -624,7 +622,7 @@ class logger_t(base_t):
624
622
  formatted = "\n".join(lines)
625
623
  """
626
624
 
627
- hide_where = {HIDE_WHERE_ATTR: None}
625
+ hide_where = {SHOW_WHERE_ATTR: False}
628
626
  if unified:
629
627
  level, _ = issues[0].split(ISSUE_LEVEL_SEPARATOR, maxsplit=1)
630
628
  wo_level = []
logger_36/version.py CHANGED
@@ -4,7 +4,7 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
4
4
  SEE COPYRIGHT NOTICE BELOW
5
5
  """
6
6
 
7
- __version__ = "2025.16"
7
+ __version__ = "2025.17"
8
8
 
9
9
  """
10
10
  COPYRIGHT NOTICE
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: logger-36
3
- Version: 2025.16
3
+ Version: 2025.17
4
4
  Summary: Simple logger with a catalog of handlers
5
5
  Home-page: https://src.koda.cnrs.fr/eric.debreuve/logger-36/
6
6
  Author: Eric Debreuve
@@ -1,5 +1,5 @@
1
1
  logger_36/__init__.py,sha256=UhKxuQLS1Pfgt5H0K_7BaDAPejOUR8byD5BYRCnHQMQ,2655
2
- logger_36/version.py,sha256=vxBUi_PLey0-7pBB4KEVJ1RP-m_hqLO7B8S6ifB0twk,2206
2
+ logger_36/version.py,sha256=SlgS0Uo9sKB6vpjWQKryKeGsW_DST0lxy888VpF5J5Q,2206
3
3
  logger_36/api/content.py,sha256=clHYYUKa8n4qef6PVlUV4mFHRRf6fnm9wEd2fu9oagA,2381
4
4
  logger_36/api/gpu.py,sha256=BOumedCAPWvCo7J-KJ3XE-jr5S0KSmgcFv_S4QKRPO8,2252
5
5
  logger_36/api/memory.py,sha256=szJVk4UTXsbYv3B-W9LFttf1F3j86GXHsKgEUOsXKl4,2743
@@ -9,13 +9,13 @@ logger_36/api/time.py,sha256=Uw1jQtY1njsRuIPRAXX44v4nPOo84MSBu_WK_YCRzQs,2324
9
9
  logger_36/api/type.py,sha256=4m5fZGI6LOQvFakEStFv6HTP4FY9nyFpNNlK34rCfQw,2286
10
10
  logger_36/catalog/config/console_rich.py,sha256=lAa5Ev5BhXvmQzfIt1FNihMNUQJFlXaIzNanAMdgtd0,2861
11
11
  logger_36/catalog/config/optional.py,sha256=HaN6mbx7gHBBppNvUw1ckhYTOrlYqb-b_r0mzPcHPjM,2398
12
- logger_36/catalog/handler/console.py,sha256=Dc9Iyg7yLqUh3H_KD1B0oou5eh7tqGxZi9x45GOLTJA,3027
13
- logger_36/catalog/handler/console_rich.py,sha256=U4hD8qF88dpDALKkeOvwnrJpUbUpG5egq1JfImU4pFg,7168
14
- logger_36/catalog/handler/file.py,sha256=h6goKVAPfrYRIM8ypdyTsZKlSaj_7O-GghQquf0-zL4,3279
15
- logger_36/catalog/handler/generic.py,sha256=rubsfh6Bbs2CFbUF2Wb3VG4AGgRAgP1nZYEV7-ukVY0,8250
12
+ logger_36/catalog/handler/console.py,sha256=nczZAIlkolkuTG5TMipqJJTtlwg58HQE1q-9hVyelCg,2951
13
+ logger_36/catalog/handler/console_rich.py,sha256=cZHFM9fHxdEnzhVg1S94wa0P_QOSTO4O1oQxigpNA0s,6907
14
+ logger_36/catalog/handler/file.py,sha256=jZEoKPUjK5MlvzxgxXICH7jJLnHr7vDw42tv7GqopiA,3181
15
+ logger_36/catalog/handler/generic.py,sha256=nfJSi0mghbSfSfZa4VV5jTetDV8ykEIkkRxRkIC084Y,7989
16
16
  logger_36/catalog/logger/chronos.py,sha256=ocY13f98EfknU7wZCv0FS9Xb7pTNaWCPSusXFIEvEd4,2437
17
17
  logger_36/catalog/logger/gpu.py,sha256=ybn7Q8exiqoigvNpzEhg0Zp027WogypuNJwfsQ1pRY4,3416
18
- logger_36/catalog/logger/memory.py,sha256=CWhr2J4BqArJxzH6tS-ZThr-rYPAQGtuLn0pP7Iryfg,4685
18
+ logger_36/catalog/logger/memory.py,sha256=aSLHDQPacPE2FJlpBRItVhQA0KxzkFDFPXPn3TcZ8Dg,4779
19
19
  logger_36/catalog/logger/system.py,sha256=3VWbceSAknZwmRhEfd8pkuLwU2B8zPhCGNGQE0h5KLo,3065
20
20
  logger_36/config/issue.py,sha256=G-i5p6lhZCLAOa-VTMyL9ZonvGCvhdoQ5KZdSWgP-FU,2267
21
21
  logger_36/config/memory.py,sha256=yCX5phsB_KJMr5xHpVUeOHFhAA7p_8yahP3X28VndOY,2217
@@ -23,14 +23,14 @@ logger_36/config/message.py,sha256=mgPcMS7qWBuqP2w5NoHw1df32kcVToVhisozb32_EII,2
23
23
  logger_36/config/system.py,sha256=HD8ZuwsXhEAExeZrww8YoDkQGMs4T5RDqQMb1W4qVgc,2477
24
24
  logger_36/constant/error.py,sha256=LzsS_P1IoH3ct_ifNWi9LzJ-X_Y5DN1naTLwwIFzDQA,2827
25
25
  logger_36/constant/generic.py,sha256=t6aRb66_NHwMhR1p7BZ4QXTU2jpLz-H5YAL4PuMtKx8,2244
26
- logger_36/constant/handler.py,sha256=PQUehMK9Yg0_rBDcMc8xpUbAsCauCLy_eS_ntiWew1Y,2378
26
+ logger_36/constant/handler.py,sha256=tnTr6JvObgL6LPIX77HR5uXQvwqAT8hbKvEWfKkzlCo,2351
27
27
  logger_36/constant/html.py,sha256=-m1CDyDN0kkurloEtJeqBsyxy9nXCImIMGLwEIF33M0,2515
28
28
  logger_36/constant/issue.py,sha256=01l8itRPWGS5F6gXtsXUJgGR-4lS1Eu3_YeKC-khKLw,2315
29
29
  logger_36/constant/logger.py,sha256=2qRkteblpbHrq9x0aiw9MPquyXrSRd6_yMQnPEhFp2U,2468
30
30
  logger_36/constant/memory.py,sha256=ZL1MwbdtNsrCrOwzEyfTsfOoOsRBTJtbbf3otHGnxXo,2343
31
31
  logger_36/constant/message.py,sha256=Ys_CAyhENlT8Z3rr-AxO4hjdl1jLsKzVSPQ8wqLOCPQ,2838
32
- logger_36/constant/path.py,sha256=fKJn2vGj012BU5DFRetDFus_tKMty2q_WL0J2KrXdCo,2731
33
- logger_36/constant/record.py,sha256=9Q28lVH_s0og4v74delgwIPAJ9G28I5rBM-brXcoY80,2308
32
+ logger_36/constant/path.py,sha256=hNT_Ut8NMWVW826eUZsJ5ieFeihFKXZBcLOUszJYn8g,2753
33
+ logger_36/constant/record.py,sha256=D_VDC5m5_LGcoV6YBb5hE6CLioUPFGX8hzcMdMazRoM,2260
34
34
  logger_36/constant/system.py,sha256=G2mzBTxRXoJMxb53TnmBaceMJC_q3WonoCG7y6nC_R8,2430
35
35
  logger_36/extension/html_.py,sha256=J9EX8-Rotq9i8bZ9U-dIpXv5gKLLnLmWqdDy4XayT1Q,3868
36
36
  logger_36/extension/line.py,sha256=3MJ3B5PXJn18RHxBUcWnNBLEYzb7VTcEAufn7ULdYfY,3143
@@ -43,12 +43,12 @@ logger_36/task/format/message.py,sha256=5mR9CZaARy9q-JtIX68IyY-DKTepkxyRV7juByqB
43
43
  logger_36/task/format/rule.py,sha256=CtR7d2X-pZFKdqG6Y2_3b5AMKg_J274Jq69kht0N6xs,2910
44
44
  logger_36/task/measure/chronos.py,sha256=1kVhu6jZlNAtNWQQh8ZVuRwZIAC9gGz3_ul1tn0t4Yw,3055
45
45
  logger_36/task/measure/memory.py,sha256=OjU5EYFH8SnzlCQKAoiXvauUlwQYOrH34jFXTVYF0jE,2517
46
- logger_36/type/handler.py,sha256=2Q3crkhIzMLyuT7pBtpmouXgKWbULdsYw8vxQZBCT2g,6637
46
+ logger_36/type/handler.py,sha256=RlYVGxP6jfLqKJH-KvJBunPrjmcQ-gcoQzr6Hw4dOdk,5962
47
47
  logger_36/type/issue.py,sha256=2rGsFqaQJCbeml9xN08mN_nK79L8qscaS_0ws36Y0bI,3214
48
- logger_36/type/logger.py,sha256=86G05pa2_N9M1Vfck5NIBwn_LJhwf2W485Tc6sm5GSw,26256
48
+ logger_36/type/logger.py,sha256=6q_9nbbumyF0aXupl36Xc_06gJ2aE7k39ZQwSffXQnI,26319
49
49
  logger_36/type/loggers.py,sha256=KLPoZ8UtQNhUw6MVu2pBcbSsIMKzgTaoxCulS1z2zPU,3748
50
50
  logger_36/type/message.py,sha256=zKME5p87ynsXte_b5usXV3VHaj34Uezs9Gg_WVWfaeY,3063
51
- logger_36-2025.16.dist-info/METADATA,sha256=S9Dh7TabMHK2y5K4psh0RvRiDHfcJiTjjYZKBGnvcCA,6506
52
- logger_36-2025.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
53
- logger_36-2025.16.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
54
- logger_36-2025.16.dist-info/RECORD,,
51
+ logger_36-2025.17.dist-info/METADATA,sha256=lniQQRbIv0AHbWw_iEoVZjm3ZKBTKQW-1BXXXdKv6fs,6506
52
+ logger_36-2025.17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
53
+ logger_36-2025.17.dist-info/top_level.txt,sha256=sM95BTMWmslEEgR_1pzwZsOeSp8C_QBiu8ImbFr0XLc,10
54
+ logger_36-2025.17.dist-info/RECORD,,