Adjust `tractor.log` API compat
Update logging helpers to use new `tractor.log` API with `pkg_name=` kwarg and add optional `tractor` "root logger" enabling. Deats, - change `piker.log.get_logger()` to use `pkg_name=` vs `_root_name=`. - add `**tractor_log_kwargs` passthrough to both wrapper fns. - add `with_tractor_log: bool` toggle to `.get_console_log()`. - strip `'piker.'` prefix from logger names when present to avoid newly added `tractor.get_logger()` warnings. Surroundingly, - add `subsys` import to `.clearing._ems` for log name - update all `get_console_log()` calls to use `level=` kwarg - add assertion checks for logger names in `_setup_persistent_emsd()` Additionally,, - fix all type annotations: `str|None` vs `str | None`. - add multiline style to conditional in `.cli.services()`. - drop unused `Optional` import from `._actor_runtime`. - drop a few "blank lines" in various function sigs. Warning: this patch will require an equivalent dev-commit at the time of writing in `tractor` itself, for now the `piker_pin` branch should be sufficient to avoid breakage 🙏! (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code kfix_tractor_logging
parent
ce1f038b53
commit
68a87ca45f
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
56
piker/log.py
56
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(
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Reference in New Issue