From 0b0c83e9dad3219fc5f7a946b5a568ac5e5a57d5 Mon Sep 17 00:00:00 2001 From: goodboy Date: Mon, 9 Feb 2026 13:15:47 -0500 Subject: [PATCH] Drop `name=__name__` from all `get_logger()` calls Use new implicit module-name detection throughout codebase to simplify logger creation and leverage auto-naming from caller mod . Main changes, - drop `name=__name__` arg from all `get_logger()` calls (across 29 modules). - update `get_console_log()` calls to include `name='tractor'` for enabling root logger in test harness and entry points; this ensures logic in `get_logger()` triggers so that **all** `tractor`-internal logging emits to console. - add info log msg in test `conftest.py` showing test-harness log level Also, - fix `.actor.uid` ref to `.actor.aid.uid` in `._trace`. - adjust a `._context` log msg formatting for clarity. - add TODO comments in `._addr`, `._uds` for when we mv to using `multiaddr`. - add todo for `RuntimeVars` type hint TODO in `.msg.types` (once we eventually get that all going obvi!) (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code --- tests/conftest.py | 6 ++++- tests/test_resource_cache.py | 3 +-- tractor/_addr.py | 4 ++- tractor/_context.py | 12 +++++---- tractor/_discovery.py | 2 +- tractor/_entry.py | 16 +++++++++--- tractor/_portal.py | 2 +- tractor/_root.py | 13 ++++++--- tractor/_streaming.py | 2 +- tractor/_supervise.py | 2 +- tractor/devx/_frame_stack.py | 2 +- tractor/devx/_stackscope.py | 2 +- tractor/devx/debug/__init__.py | 2 +- tractor/devx/debug/_post_mortem.py | 2 +- tractor/devx/debug/_sigint.py | 2 +- tractor/devx/debug/_sync.py | 2 +- tractor/devx/debug/_trace.py | 4 +-- tractor/devx/debug/_tty_lock.py | 2 +- tractor/ipc/_chan.py | 2 +- tractor/ipc/_server.py | 2 +- tractor/ipc/_shm.py | 2 +- tractor/ipc/_tcp.py | 2 +- tractor/ipc/_transport.py | 2 +- tractor/ipc/_uds.py | 6 ++++- tractor/msg/_codec.py | 2 +- tractor/msg/_ops.py | 2 +- tractor/msg/types.py | 7 +++-- tractor/trionics/_broadcast.py | 2 +- tractor/trionics/_mngrs.py | 2 +- tractor/trionics/_taskc.py | 42 ++++++++++++++++-------------- 30 files changed, 92 insertions(+), 61 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index b84f4105..47837fa5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -65,7 +65,11 @@ def loglevel(request): import tractor orig = tractor.log._default_loglevel level = tractor.log._default_loglevel = request.config.option.loglevel - tractor.log.get_console_log(level) + log = tractor.log.get_console_log( + level=level, + name='tractor', # <- enable root logger + ) + log.info(f'Test-harness logging level: {level}\n') yield level tractor.log._default_loglevel = orig diff --git a/tests/test_resource_cache.py b/tests/test_resource_cache.py index 10eb3d84..5f0e7fca 100644 --- a/tests/test_resource_cache.py +++ b/tests/test_resource_cache.py @@ -17,9 +17,8 @@ from tractor.log import ( get_console_log, get_logger, ) -log = get_logger(__name__) - +log = get_logger() _resource: int = 0 diff --git a/tractor/_addr.py b/tractor/_addr.py index d8d11227..26706cdb 100644 --- a/tractor/_addr.py +++ b/tractor/_addr.py @@ -37,7 +37,7 @@ from .ipc._uds import UDSAddress if TYPE_CHECKING: from ._runtime import Actor -log = get_logger(__name__) +log = get_logger() # TODO, maybe breakout the netns key to a struct? @@ -259,6 +259,8 @@ def wrap_address( case _: # import pdbp; pdbp.set_trace() + # from tractor.devx import mk_pdb + # mk_pdb().set_trace() raise TypeError( f'Can not wrap unwrapped-address ??\n' f'type(addr): {type(addr)!r}\n' diff --git a/tractor/_context.py b/tractor/_context.py index da31e423..8ace1b4d 100644 --- a/tractor/_context.py +++ b/tractor/_context.py @@ -113,7 +113,7 @@ if TYPE_CHECKING: CallerInfo, ) -log = get_logger(__name__) +log = get_logger() class Unresolved: @@ -2391,16 +2391,18 @@ async def open_context_from_portal( case trio.Cancelled(): logmeth = log.cancel cause: str = 'cancelled' + msg: str = ( + f'ctx {ctx.side!r}-side {cause!r} with,\n' + f'{ctx.repr_outcome()!r}\n' + ) # XXX explicitly report on any non-graceful-taskc cases case _: cause: str = 'errored' logmeth = log.exception + msg: str = f'ctx {ctx.side!r}-side {cause!r} with,\n' - logmeth( - f'ctx {ctx.side!r}-side {cause!r} with,\n' - f'{ctx.repr_outcome()!r}\n' - ) + logmeth(msg) if debug_mode(): # async with debug.acquire_debug_lock(portal.actor.uid): diff --git a/tractor/_discovery.py b/tractor/_discovery.py index a332ab73..edc43d86 100644 --- a/tractor/_discovery.py +++ b/tractor/_discovery.py @@ -53,7 +53,7 @@ if TYPE_CHECKING: from ._runtime import Actor -log = get_logger(__name__) +log = get_logger() @acm diff --git a/tractor/_entry.py b/tractor/_entry.py index 68e72501..c8b5cc3f 100644 --- a/tractor/_entry.py +++ b/tractor/_entry.py @@ -50,7 +50,7 @@ if TYPE_CHECKING: from ._spawn import SpawnMethodKey -log = get_logger(__name__) +log = get_logger() def _mp_main( @@ -72,11 +72,15 @@ def _mp_main( spawn_ctx: mp.context.BaseContext = try_set_start_method(start_method) assert spawn_ctx + # XXX, enable root log at level if actor.loglevel is not None: log.info( - f'Setting loglevel for {actor.uid} to {actor.loglevel}' + f'Setting loglevel for {actor.uid} to {actor.loglevel!r}' + ) + get_console_log( + level=actor.loglevel, + name='tractor', ) - get_console_log(actor.loglevel) # TODO: use scops headers like for `trio` below! # (well after we libify it maybe..) @@ -126,8 +130,12 @@ def _trio_main( parent_addr=parent_addr ) + # XXX, enable root log at level if actor.loglevel is not None: - get_console_log(actor.loglevel) + get_console_log( + level=actor.loglevel, + name='tractor', + ) log.info( f'Starting `trio` subactor from parent @ ' f'{parent_addr}\n' diff --git a/tractor/_portal.py b/tractor/_portal.py index 69133528..a914bb80 100644 --- a/tractor/_portal.py +++ b/tractor/_portal.py @@ -69,7 +69,7 @@ from ._streaming import ( if TYPE_CHECKING: from ._runtime import Actor -log = get_logger(__name__) +log = get_logger() class Portal: diff --git a/tractor/_root.py b/tractor/_root.py index d7b3359b..2fb7755d 100644 --- a/tractor/_root.py +++ b/tractor/_root.py @@ -289,10 +289,12 @@ async def open_root_actor( for uw_addr in uw_reg_addrs ] - loglevel = ( + loglevel: str = ( loglevel - or log._default_loglevel - ).upper() + or + log._default_loglevel + ) + loglevel: str = loglevel.upper() if ( debug_mode @@ -323,7 +325,10 @@ async def open_root_actor( ) assert loglevel - _log = log.get_console_log(loglevel) + _log = log.get_console_log( + level=loglevel, + name='tractor', + ) assert _log # TODO: factor this into `.devx._stackscope`!! diff --git a/tractor/_streaming.py b/tractor/_streaming.py index 4683f35d..fb870f1c 100644 --- a/tractor/_streaming.py +++ b/tractor/_streaming.py @@ -59,7 +59,7 @@ if TYPE_CHECKING: from .ipc import Channel -log = get_logger(__name__) +log = get_logger() # TODO: the list diff --git a/tractor/_supervise.py b/tractor/_supervise.py index 22ef62b4..301c44e8 100644 --- a/tractor/_supervise.py +++ b/tractor/_supervise.py @@ -62,7 +62,7 @@ if TYPE_CHECKING: from .ipc import IPCServer -log = get_logger(__name__) +log = get_logger() class ActorNursery: diff --git a/tractor/devx/_frame_stack.py b/tractor/devx/_frame_stack.py index c99d3ecd..9c722def 100644 --- a/tractor/devx/_frame_stack.py +++ b/tractor/devx/_frame_stack.py @@ -49,7 +49,7 @@ from tractor.msg import ( import wrapt -log = get_logger(__name__) +log = get_logger() # TODO: yeah, i don't love this and we should prolly just # write a decorator that actually keeps a stupid ref to the func diff --git a/tractor/devx/_stackscope.py b/tractor/devx/_stackscope.py index 11d2a1ef..1257ec1b 100644 --- a/tractor/devx/_stackscope.py +++ b/tractor/devx/_stackscope.py @@ -51,7 +51,7 @@ from tractor import ( ) from tractor.devx import debug -log = logmod.get_logger(__name__) +log = logmod.get_logger() if TYPE_CHECKING: diff --git a/tractor/devx/debug/__init__.py b/tractor/devx/debug/__init__.py index faf9f2f7..d8476095 100644 --- a/tractor/devx/debug/__init__.py +++ b/tractor/devx/debug/__init__.py @@ -59,7 +59,7 @@ from ._sigint import ( _ctlc_ignore_header as _ctlc_ignore_header ) -log = get_logger(__name__) +log = get_logger() # ---------------- # XXX PKG TODO XXX diff --git a/tractor/devx/debug/_post_mortem.py b/tractor/devx/debug/_post_mortem.py index 32d10074..da9a35b2 100644 --- a/tractor/devx/debug/_post_mortem.py +++ b/tractor/devx/debug/_post_mortem.py @@ -84,7 +84,7 @@ _crash_msg: str = ( 'Opening a pdb REPL in crashed actor' ) -log = get_logger(__package__) +log = get_logger() class BoxedMaybeException(Struct): diff --git a/tractor/devx/debug/_sigint.py b/tractor/devx/debug/_sigint.py index 80f79e58..c2a16f62 100644 --- a/tractor/devx/debug/_sigint.py +++ b/tractor/devx/debug/_sigint.py @@ -47,7 +47,7 @@ if TYPE_CHECKING: Actor, ) -log = get_logger(__name__) +log = get_logger() _ctlc_ignore_header: str = ( 'Ignoring SIGINT while debug REPL in use' diff --git a/tractor/devx/debug/_sync.py b/tractor/devx/debug/_sync.py index cf4bb334..854805c7 100644 --- a/tractor/devx/debug/_sync.py +++ b/tractor/devx/debug/_sync.py @@ -58,7 +58,7 @@ from ._sigint import ( _ctlc_ignore_header as _ctlc_ignore_header ) -log = get_logger(__package__) +log = get_logger() async def maybe_wait_for_debugger( diff --git a/tractor/devx/debug/_trace.py b/tractor/devx/debug/_trace.py index a23d2e23..c1219c30 100644 --- a/tractor/devx/debug/_trace.py +++ b/tractor/devx/debug/_trace.py @@ -93,7 +93,7 @@ if TYPE_CHECKING: # from ._post_mortem import BoxedMaybeException from ._repl import PdbREPL -log = get_logger(__package__) +log = get_logger() _pause_msg: str = 'Opening a pdb REPL in paused actor' _repl_fail_msg: str|None = ( @@ -628,7 +628,7 @@ def _set_trace( log.pdb( f'{_pause_msg}\n' f'>(\n' - f'|_{actor.uid}\n' + f'|_{actor.aid.uid}\n' f' |_{task}\n' # @ {actor.uid}\n' # f'|_{task}\n' # ^-TODO-^ more compact pformating? diff --git a/tractor/devx/debug/_tty_lock.py b/tractor/devx/debug/_tty_lock.py index 3f9576a3..9573b242 100644 --- a/tractor/devx/debug/_tty_lock.py +++ b/tractor/devx/debug/_tty_lock.py @@ -81,7 +81,7 @@ if TYPE_CHECKING: BoxedMaybeException, ) -log = get_logger(__name__) +log = get_logger() class LockStatus( diff --git a/tractor/ipc/_chan.py b/tractor/ipc/_chan.py index dcb0d6ad..64973fd4 100644 --- a/tractor/ipc/_chan.py +++ b/tractor/ipc/_chan.py @@ -60,7 +60,7 @@ if TYPE_CHECKING: from ._transport import MsgTransport -log = get_logger(__name__) +log = get_logger() _is_windows = platform.system() == 'Windows' diff --git a/tractor/ipc/_server.py b/tractor/ipc/_server.py index 55374b0a..0ce5ae3c 100644 --- a/tractor/ipc/_server.py +++ b/tractor/ipc/_server.py @@ -72,7 +72,7 @@ if TYPE_CHECKING: from .._supervise import ActorNursery -log = log.get_logger(__name__) +log = log.get_logger() async def maybe_wait_on_canced_subs( diff --git a/tractor/ipc/_shm.py b/tractor/ipc/_shm.py index 2360f893..2a5fbb82 100644 --- a/tractor/ipc/_shm.py +++ b/tractor/ipc/_shm.py @@ -59,7 +59,7 @@ except ImportError: pass -log = get_logger(__name__) +log = get_logger() SharedMemory = disable_mantracker() diff --git a/tractor/ipc/_tcp.py b/tractor/ipc/_tcp.py index a1f511d5..b05f2829 100644 --- a/tractor/ipc/_tcp.py +++ b/tractor/ipc/_tcp.py @@ -41,7 +41,7 @@ from tractor.ipc._transport import ( ) -log = get_logger(__name__) +log = get_logger() class TCPAddress( diff --git a/tractor/ipc/_transport.py b/tractor/ipc/_transport.py index 8c76c8ad..704c13a6 100644 --- a/tractor/ipc/_transport.py +++ b/tractor/ipc/_transport.py @@ -56,7 +56,7 @@ from tractor.msg import ( if TYPE_CHECKING: from tractor._addr import Address -log = get_logger(__name__) +log = get_logger() # (codec, transport) diff --git a/tractor/ipc/_uds.py b/tractor/ipc/_uds.py index e23fd8d2..25ad362b 100644 --- a/tractor/ipc/_uds.py +++ b/tractor/ipc/_uds.py @@ -63,7 +63,7 @@ if TYPE_CHECKING: from ._runtime import Actor -log = get_logger(__name__) +log = get_logger() def unwrap_sockpath( @@ -166,6 +166,10 @@ class UDSAddress( ) if actor: sockname: str = '::'.join(actor.uid) + f'@{pid}' + # ?^TODO, for `multiaddr`'s parser we can't use the `::` + # above^, SO maybe a `.` or something else here? + # sockname: str = '.'.join(actor.uid) + f'@{pid}' + # -[ ] CURRETLY using `.` BREAKS TEST SUITE tho.. else: prefix: str = '' if is_root_process(): diff --git a/tractor/msg/_codec.py b/tractor/msg/_codec.py index 1e9623af..e8a0379e 100644 --- a/tractor/msg/_codec.py +++ b/tractor/msg/_codec.py @@ -68,7 +68,7 @@ from tractor.log import get_logger if TYPE_CHECKING: from tractor._context import Context -log = get_logger(__name__) +log = get_logger() # TODO: unify with `MsgCodec` by making `._dec` part this? diff --git a/tractor/msg/_ops.py b/tractor/msg/_ops.py index aa215a81..ac6322e6 100644 --- a/tractor/msg/_ops.py +++ b/tractor/msg/_ops.py @@ -77,7 +77,7 @@ if TYPE_CHECKING: from tractor._streaming import MsgStream -log = get_logger(__name__) +log = get_logger() _def_any_pldec: MsgDec[Any] = mk_dec(spec=Any) diff --git a/tractor/msg/types.py b/tractor/msg/types.py index 17d99449..6176ca90 100644 --- a/tractor/msg/types.py +++ b/tractor/msg/types.py @@ -51,7 +51,7 @@ from tractor.log import get_logger # from tractor._addr import UnwrappedAddress -log = get_logger('tractor.msgspec') +log = get_logger() # type variable for the boxed payload field `.pld` PayloadT = TypeVar('PayloadT') @@ -202,7 +202,10 @@ class SpawnSpec( # TODO: similar to the `Start` kwargs spec needed below, we need # a hard `Struct` def for all of these fields! _parent_main_data: dict - _runtime_vars: dict[str, Any] + _runtime_vars: ( + dict[str, Any] + #|RuntimeVars # !TODO + ) # ^NOTE see `._state._runtime_vars: dict` # module import capability diff --git a/tractor/trionics/_broadcast.py b/tractor/trionics/_broadcast.py index 2286e70d..eb3894cf 100644 --- a/tractor/trionics/_broadcast.py +++ b/tractor/trionics/_broadcast.py @@ -42,7 +42,7 @@ from trio.lowlevel import current_task from msgspec import Struct from tractor.log import get_logger -log = get_logger(__name__) +log = get_logger() # TODO: use new type-vars syntax from 3.12 # https://realpython.com/python312-new-features/#dedicated-type-variable-syntax diff --git a/tractor/trionics/_mngrs.py b/tractor/trionics/_mngrs.py index 57897c4e..577eb050 100644 --- a/tractor/trionics/_mngrs.py +++ b/tractor/trionics/_mngrs.py @@ -49,7 +49,7 @@ if TYPE_CHECKING: from tractor import ActorNursery -log = get_logger(__name__) +log = get_logger() # A regular invariant generic type T = TypeVar("T") diff --git a/tractor/trionics/_taskc.py b/tractor/trionics/_taskc.py index 0298912d..7d00b4fd 100644 --- a/tractor/trionics/_taskc.py +++ b/tractor/trionics/_taskc.py @@ -34,7 +34,7 @@ from typing import ( import trio from tractor.log import get_logger -log = get_logger(__name__) +log = get_logger() if TYPE_CHECKING: @@ -246,23 +246,12 @@ async def maybe_raise_from_masking_exc( type(exc_match) # masked type ) + # Add to masked `exc_ctx` if do_warn: exc_ctx.add_note(note) - if ( - do_warn - and - type(exc_match) in always_warn_on - ): - log.warning(note) - - if ( - do_warn - and - raise_unmasked - ): + # don't unmask already known "special" cases.. if len(masked) < 2: - # don't unmask already known "special" cases.. if ( _mask_cases and @@ -283,11 +272,26 @@ async def maybe_raise_from_masking_exc( ) raise exc_match - raise exc_ctx from exc_match + # ^?TODO, see above but, possibly unmasking sub-exc + # entries if there are > 1 + # else: + # await pause(shield=True) + + if type(exc_match) in always_warn_on: + import traceback + trace: list[str] = traceback.format_exception( + type(exc_ctx), + exc_ctx, + exc_ctx.__traceback__ + ) + tb_str: str = ''.join(trace) + log.warning(tb_str) + # XXX, for debug + # from tractor import pause + # await pause(shield=True) + + if raise_unmasked: + raise exc_ctx from exc_match - # ??TODO, see above but, possibly unmasking sub-exc - # entries if there are > 1 - # else: - # await pause(shield=True) else: raise