Skip to content

Commit cc08179

Browse files
committed
Simplify Logger by grouping all options in a tuple
1 parent 6ec9a56 commit cc08179

File tree

3 files changed

+41
-75
lines changed

3 files changed

+41
-75
lines changed

loguru/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
__all__ = ["logger"]
1515

16-
logger = _Logger({}, None, None, False, False, False, False, 0)
16+
logger = _Logger(None, 0, False, False, False, False, None, {})
1717

1818
if _defaults.LOGURU_AUTOINIT and _sys.stderr:
1919
logger.add(_sys.stderr)

loguru/_logger.py

+39-73
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,8 @@ class Logger:
163163

164164
_lock = threading.Lock()
165165

166-
def __init__(self, extra, patcher, exception, record, lazy, ansi, raw, depth):
167-
self._extra = extra
168-
self._patcher = patcher
169-
self._record = record
170-
self._exception = exception
171-
self._lazy = lazy
172-
self._ansi = ansi
173-
self._raw = raw
174-
self._depth = depth
166+
def __init__(self, exception, depth, record, lazy, ansi, raw, patcher, extra):
167+
self._options = (exception, depth, record, lazy, ansi, raw, patcher, extra)
175168

176169
def add(
177170
self,
@@ -983,16 +976,15 @@ def __exit__(self_, type_, value, traceback_):
983976
if not issubclass(type_, exception):
984977
return False
985978

986-
if self_._from_decorator:
987-
from_decorator = True
988-
else:
989-
from_decorator = False
979+
from_decorator = self_._from_decorator
980+
_, depth, _, *options = self._options
981+
982+
if from_decorator:
983+
depth += 1
990984

991-
exception_ = (type_, value, traceback_)
985+
catch_options = [(type_, value, traceback_), depth, True] + options
992986
level_id, static_level_no = self._dynamic_level(level)
993-
self._log(
994-
level_id, static_level_no, from_decorator, exception_, True, message, (), {}
995-
)
987+
self._log(level_id, static_level_no, from_decorator, catch_options, message, (), {})
996988

997989
return not reraise
998990

@@ -1088,7 +1080,7 @@ def opt(self, *, exception=None, record=False, lazy=False, ansi=False, raw=False
10881080
>>> func()
10891081
[18:11:54] DEBUG in 'func' - Get parent context
10901082
"""
1091-
return Logger(self._extra, self._patcher, exception, record, lazy, ansi, raw, depth)
1083+
return Logger(exception, depth, record, lazy, ansi, raw, *self._options[-2:])
10921084

10931085
def bind(_self, **kwargs):
10941086
"""Bind attributes to the ``extra`` dict of each logged message record.
@@ -1124,16 +1116,8 @@ def bind(_self, **kwargs):
11241116
>>> instance_2.call("Second instance")
11251117
127.0.0.1 - Second instance
11261118
"""
1127-
return Logger(
1128-
{**_self._extra, **kwargs},
1129-
_self._patcher,
1130-
_self._exception,
1131-
_self._record,
1132-
_self._lazy,
1133-
_self._ansi,
1134-
_self._raw,
1135-
_self._depth,
1136-
)
1119+
*options, extra = _self._options
1120+
return Logger(*options, {**extra, **kwargs})
11371121

11381122
def patch(self, patcher):
11391123
"""Attach a function to modify the record dict created by each logging call.
@@ -1178,16 +1162,8 @@ def patch(self, patcher):
11781162
... level, message = record["level"], record["message"]
11791163
... logger.patch(lambda r: r.update(record)).log(level, message)
11801164
"""
1181-
return Logger(
1182-
self._extra,
1183-
patcher,
1184-
self._exception,
1185-
self._record,
1186-
self._lazy,
1187-
self._ansi,
1188-
self._raw,
1189-
self._depth,
1190-
)
1165+
*options, _, extra = self._options
1166+
return Logger(*options, patcher, extra)
11911167

11921168
def level(self, name, no=None, color=None, icon=None):
11931169
"""Add, update or retrieve a logging level.
@@ -1566,16 +1542,14 @@ def _find_iter(fileobj, regex, chunk):
15661542
buffer = buffer[end:]
15671543
yield from matches[:-1]
15681544

1569-
def _log(
1570-
self, level_id, static_level_no, from_decorator, exception, record_, message, args, kwargs
1571-
):
1545+
@staticmethod
1546+
def _log(level_id, static_level_no, from_decorator, options, message, args, kwargs):
15721547
if not Logger._handlers:
15731548
return
15741549

1575-
if from_decorator:
1576-
frame = get_frame(self._depth + 3)
1577-
else:
1578-
frame = get_frame(self._depth + 2)
1550+
(exception, depth, record, lazy, ansi, raw, patcher, extra) = options
1551+
1552+
frame = get_frame(depth + 2)
15791553

15801554
try:
15811555
name = frame.f_globals["__name__"]
@@ -1654,10 +1628,10 @@ def _log(
16541628
else:
16551629
exception = None
16561630

1657-
record = {
1631+
log_record = {
16581632
"elapsed": elapsed,
16591633
"exception": exception,
1660-
"extra": {**Logger._extra_class, **self._extra},
1634+
"extra": {**Logger._extra_class, **extra},
16611635
"file": file_recattr,
16621636
"function": code.co_name,
16631637
"level": level_recattr,
@@ -1670,69 +1644,61 @@ def _log(
16701644
"time": current_datetime,
16711645
}
16721646

1673-
if self._lazy:
1647+
if lazy:
16741648
args = [arg() for arg in args]
16751649
kwargs = {key: value() for key, value in kwargs.items()}
16761650

1677-
if record_:
1678-
record["message"] = message.format(*args, **kwargs, record=record)
1651+
if record:
1652+
log_record["message"] = message.format(*args, **kwargs, record=log_record)
16791653
elif args or kwargs:
1680-
record["message"] = message.format(*args, **kwargs)
1654+
log_record["message"] = message.format(*args, **kwargs)
16811655

16821656
if Logger._patcher_class:
1683-
Logger._patcher_class(record)
1657+
Logger._patcher_class(log_record)
16841658

1685-
if self._patcher:
1686-
self._patcher(record)
1659+
if patcher:
1660+
patcher(log_record)
16871661

16881662
for handler in Logger._handlers.values():
1689-
handler.emit(record, level_id, from_decorator, self._ansi, self._raw)
1663+
handler.emit(log_record, level_id, from_decorator, ansi, raw)
16901664

16911665
def trace(_self, _message, *args, **kwargs):
16921666
r"""Log ``_message.format(*args, **kwargs)`` with severity ``'TRACE'``."""
1693-
_self._log("TRACE", None, False, _self._exception, _self._record, _message, args, kwargs)
1667+
_self._log("TRACE", None, False, _self._options, _message, args, kwargs)
16941668

16951669
def debug(_self, _message, *args, **kwargs):
16961670
r"""Log ``_message.format(*args, **kwargs)`` with severity ``'DEBUG'``."""
1697-
_self._log("DEBUG", None, False, _self._exception, _self._record, _message, args, kwargs)
1671+
_self._log("DEBUG", None, False, _self._options, _message, args, kwargs)
16981672

16991673
def info(_self, _message, *args, **kwargs):
17001674
r"""Log ``_message.format(*args, **kwargs)`` with severity ``'INFO'``."""
1701-
_self._log("INFO", None, False, _self._exception, _self._record, _message, args, kwargs)
1675+
_self._log("INFO", None, False, _self._options, _message, args, kwargs)
17021676

17031677
def success(_self, _message, *args, **kwargs):
17041678
r"""Log ``_message.format(*args, **kwargs)`` with severity ``'SUCCESS'``."""
1705-
_self._log("SUCCESS", None, False, _self._exception, _self._record, _message, args, kwargs)
1679+
_self._log("SUCCESS", None, False, _self._options, _message, args, kwargs)
17061680

17071681
def warning(_self, _message, *args, **kwargs):
17081682
r"""Log ``_message.format(*args, **kwargs)`` with severity ``'WARNING'``."""
1709-
_self._log("WARNING", None, False, _self._exception, _self._record, _message, args, kwargs)
1683+
_self._log("WARNING", None, False, _self._options, _message, args, kwargs)
17101684

17111685
def error(_self, _message, *args, **kwargs):
17121686
r"""Log ``_message.format(*args, **kwargs)`` with severity ``'ERROR'``."""
1713-
_self._log("ERROR", None, False, _self._exception, _self._record, _message, args, kwargs)
1687+
_self._log("ERROR", None, False, _self._options, _message, args, kwargs)
17141688

17151689
def critical(_self, _message, *args, **kwargs):
17161690
r"""Log ``_message.format(*args, **kwargs)`` with severity ``'CRITICAL'``."""
1717-
_self._log("CRITICAL", None, False, _self._exception, _self._record, _message, args, kwargs)
1691+
_self._log("CRITICAL", None, False, _self._options, _message, args, kwargs)
17181692

17191693
def exception(_self, _message, *args, **kwargs):
17201694
r"""Convenience method for logging an ``'ERROR'`` with exception information."""
1721-
_self._log("ERROR", None, False, True, _self._record, _message, args, kwargs)
1695+
options = (True,) + _self._options[1:]
1696+
_self._log("ERROR", None, False, options, _message, args, kwargs)
17221697

17231698
def log(_self, _level, _message, *args, **kwargs):
17241699
r"""Log ``_message.format(*args, **kwargs)`` with severity ``_level``."""
17251700
level_id, static_level_no = _self._dynamic_level(_level)
1726-
_self._log(
1727-
level_id,
1728-
static_level_no,
1729-
False,
1730-
_self._exception,
1731-
_self._record,
1732-
_message,
1733-
args,
1734-
kwargs,
1735-
)
1701+
_self._log(level_id, static_level_no, False, _self._options, _message, args, kwargs)
17361702

17371703
@staticmethod
17381704
@functools.lru_cache(maxsize=32)

tests/conftest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def reset_logger():
2727

2828
def reset():
2929
loguru.logger.remove()
30-
loguru.logger.__init__({}, None, None, False, False, False, False, 0)
30+
loguru.logger.__init__(None, 0, False, False, False, False, None, {})
3131
loguru._logger.Logger._levels = default_levels.copy()
3232
loguru._logger.Logger._levels_ansi_codes = default_levels_ansi_codes.copy()
3333
loguru._logger.Logger._min_level = float("inf")

0 commit comments

Comments
 (0)