diff --git a/piker/clearing/_ems.py b/piker/clearing/_ems.py index a5939eb7..7000d012 100644 --- a/piker/clearing/_ems.py +++ b/piker/clearing/_ems.py @@ -47,6 +47,7 @@ from tractor import trionics from ._util import ( log, # sub-sys logger get_console_log, + subsys, ) from ..accounting._mktinfo import ( unpack_fqme, @@ -136,7 +137,7 @@ class DarkBook(Struct): tuple[ Callable[[float], bool], # predicate tuple[str, ...], # tickfilter - dict | Order, # cmd / msg type + dict|Order, # cmd / msg type # live submission constraint parameters float, # percent_away max price diff @@ -278,7 +279,7 @@ async def clear_dark_triggers( # remove exec-condition from set log.info(f'Removing trigger for {oid}') - trigger: tuple | None = execs.pop(oid, None) + trigger: tuple|None = execs.pop(oid, None) if not trigger: log.warning( f'trigger for {oid} was already removed!?' @@ -336,8 +337,8 @@ async def open_brokerd_dialog( brokermod: ModuleType, portal: tractor.Portal, exec_mode: str, - fqme: str | None = None, - loglevel: str | None = None, + fqme: str|None = None, + loglevel: str|None = None, ) -> tuple[ tractor.MsgStream, @@ -761,12 +762,16 @@ _router: Router = None @tractor.context async def _setup_persistent_emsd( ctx: tractor.Context, - loglevel: str | None = None, + loglevel: str|None = None, ) -> None: if loglevel: - get_console_log(loglevel) + _log = get_console_log( + level=loglevel, + name=subsys, + ) + assert _log.name == 'piker.clearing' global _router @@ -822,7 +827,7 @@ async def translate_and_relay_brokerd_events( f'Rx brokerd trade msg:\n' f'{fmsg}' ) - status_msg: Status | None = None + status_msg: Status|None = None match brokerd_msg: # BrokerdPosition @@ -1283,7 +1288,7 @@ async def process_client_order_cmds( and status.resp == 'dark_open' ): # remove from dark book clearing - entry: tuple | None = dark_book.triggers[fqme].pop(oid, None) + entry: tuple|None = dark_book.triggers[fqme].pop(oid, None) if entry: ( pred, diff --git a/piker/clearing/_util.py b/piker/clearing/_util.py index c82a01aa..67c501f7 100644 --- a/piker/clearing/_util.py +++ b/piker/clearing/_util.py @@ -28,12 +28,14 @@ from ..log import ( from piker.types import Struct subsys: str = 'piker.clearing' -log = get_logger(subsys) +log = get_logger( + name='piker.clearing', +) # TODO, oof doesn't this ignore the `loglevel` then??? get_console_log = partial( get_console_log, - name=subsys, + name='clearing', ) diff --git a/piker/cli/__init__.py b/piker/cli/__init__.py index fdecb818..46c5da70 100644 --- a/piker/cli/__init__.py +++ b/piker/cli/__init__.py @@ -136,7 +136,10 @@ def pikerd( ''' # from tractor.devx import maybe_open_crash_handler # with maybe_open_crash_handler(pdb=False): - log = get_console_log(loglevel, name='cli') + log = get_console_log( + level=loglevel, + with_tractor_log=tl, + ) if pdb: log.warning(( @@ -295,7 +298,11 @@ def cli( @click.option('--tl', is_flag=True, help='Enable tractor logging') @click.argument('ports', nargs=-1, required=False) @click.pass_obj -def services(config, tl, ports): +def services( + config, + tl: bool, + ports, +): from ..service import ( open_piker_runtime, @@ -316,7 +323,11 @@ def services(config, tl, ports): async with ( open_piker_runtime( name='service_query', - loglevel=config['loglevel'] if tl else None, + loglevel=( + config['loglevel'] + if tl + else None, + ), ), tractor.get_registry( addr=addr, diff --git a/piker/data/_util.py b/piker/data/_util.py index 8c78255f..a1aafcd0 100644 --- a/piker/data/_util.py +++ b/piker/data/_util.py @@ -26,7 +26,9 @@ from ..log import ( ) subsys: str = 'piker.data' -log = get_logger(subsys) +log = get_logger( + name=subsys, +) get_console_log = partial( get_console_log, diff --git a/piker/log.py b/piker/log.py index dc5cfc59..8cec907c 100644 --- a/piker/log.py +++ b/piker/log.py @@ -37,35 +37,69 @@ _proj_name: str = 'piker' def get_logger( - name: str = None, - + name: str|None = None, + **tractor_log_kwargs, ) -> logging.Logger: ''' - Return the package log or a sub-log for `name` if provided. + Return the package log or a sub-logger if a `name=` is provided, + which defaults to the calling module's pkg-namespace path. + + See `tractor.log.get_logger()` for details. ''' + pkg_name: str = _proj_name + if ( + name + and + pkg_name in name + ): + name: str = name.lstrip(f'{_proj_name}.') + return tractor.log.get_logger( name=name, - _root_name=_proj_name, + pkg_name=pkg_name, + **tractor_log_kwargs, ) def get_console_log( - level: str | None = None, - name: str | None = None, + level: str|None = None, + name: str|None = None, + pkg_name: str|None = None, + with_tractor_log: bool = False, + **tractor_log_kwargs, ) -> logging.Logger: ''' - Get the package logger and enable a handler which writes to stderr. + Get the package logger and enable a handler which writes to + stderr. - Yeah yeah, i know we can use ``DictConfig``. You do it... + Yeah yeah, i know we can use `DictConfig`. + You do it.. Bp ''' + pkg_name: str = _proj_name + if ( + name + and + pkg_name in name + ): + name: str = name.lstrip(f'{_proj_name}.') + if with_tractor_log: + t_log = tractor.log.get_console_log( + level=level, + name='tractor', # <- XXX, force root tractor log! + **tractor_log_kwargs, + ) + # TODO/ allow only enabling certain tractor sub-logs? + assert t_log.name == 'tractor' + return tractor.log.get_console_log( - level, + level=level, name=name, - _root_name=_proj_name, - ) # our root logger + pkg_name=pkg_name, + **tractor_log_kwargs, + ) def colorize_json( diff --git a/piker/service/_actor_runtime.py b/piker/service/_actor_runtime.py index 33f23453..0524b863 100644 --- a/piker/service/_actor_runtime.py +++ b/piker/service/_actor_runtime.py @@ -21,7 +21,6 @@ from __future__ import annotations import os from typing import ( - Optional, Any, ClassVar, ) @@ -59,7 +58,7 @@ async def open_piker_runtime( registry_addrs: list[tuple[str, int]] = [], enable_modules: list[str] = [], - loglevel: Optional[str] = None, + loglevel: str|None = None, # XXX NOTE XXX: you should pretty much never want debug mode # for data daemons when running in production. @@ -163,8 +162,7 @@ _root_modules: list[str] = [ @acm async def open_pikerd( registry_addrs: list[tuple[str, int]], - - loglevel: str | None = None, + loglevel: str|None = None, # XXX: you should pretty much never want debug mode # for data daemons when running in production. @@ -192,7 +190,6 @@ async def open_pikerd( async with ( open_piker_runtime( - name=_root_dname, loglevel=loglevel, debug_mode=debug_mode, @@ -273,7 +270,9 @@ async def maybe_open_pikerd( ''' if loglevel: - get_console_log(loglevel) + get_console_log( + level=loglevel + ) # subtle, we must have the runtime up here or portal lookup will fail query_name = kwargs.pop(