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 (
|
from ._util import (
|
||||||
log, # sub-sys logger
|
log, # sub-sys logger
|
||||||
get_console_log,
|
get_console_log,
|
||||||
|
subsys,
|
||||||
)
|
)
|
||||||
from ..accounting._mktinfo import (
|
from ..accounting._mktinfo import (
|
||||||
unpack_fqme,
|
unpack_fqme,
|
||||||
|
|
@ -136,7 +137,7 @@ class DarkBook(Struct):
|
||||||
tuple[
|
tuple[
|
||||||
Callable[[float], bool], # predicate
|
Callable[[float], bool], # predicate
|
||||||
tuple[str, ...], # tickfilter
|
tuple[str, ...], # tickfilter
|
||||||
dict | Order, # cmd / msg type
|
dict|Order, # cmd / msg type
|
||||||
|
|
||||||
# live submission constraint parameters
|
# live submission constraint parameters
|
||||||
float, # percent_away max price diff
|
float, # percent_away max price diff
|
||||||
|
|
@ -278,7 +279,7 @@ async def clear_dark_triggers(
|
||||||
|
|
||||||
# remove exec-condition from set
|
# remove exec-condition from set
|
||||||
log.info(f'Removing trigger for {oid}')
|
log.info(f'Removing trigger for {oid}')
|
||||||
trigger: tuple | None = execs.pop(oid, None)
|
trigger: tuple|None = execs.pop(oid, None)
|
||||||
if not trigger:
|
if not trigger:
|
||||||
log.warning(
|
log.warning(
|
||||||
f'trigger for {oid} was already removed!?'
|
f'trigger for {oid} was already removed!?'
|
||||||
|
|
@ -336,8 +337,8 @@ async def open_brokerd_dialog(
|
||||||
brokermod: ModuleType,
|
brokermod: ModuleType,
|
||||||
portal: tractor.Portal,
|
portal: tractor.Portal,
|
||||||
exec_mode: str,
|
exec_mode: str,
|
||||||
fqme: str | None = None,
|
fqme: str|None = None,
|
||||||
loglevel: str | None = None,
|
loglevel: str|None = None,
|
||||||
|
|
||||||
) -> tuple[
|
) -> tuple[
|
||||||
tractor.MsgStream,
|
tractor.MsgStream,
|
||||||
|
|
@ -761,12 +762,16 @@ _router: Router = None
|
||||||
@tractor.context
|
@tractor.context
|
||||||
async def _setup_persistent_emsd(
|
async def _setup_persistent_emsd(
|
||||||
ctx: tractor.Context,
|
ctx: tractor.Context,
|
||||||
loglevel: str | None = None,
|
loglevel: str|None = None,
|
||||||
|
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
||||||
if loglevel:
|
if loglevel:
|
||||||
get_console_log(loglevel)
|
_log = get_console_log(
|
||||||
|
level=loglevel,
|
||||||
|
name=subsys,
|
||||||
|
)
|
||||||
|
assert _log.name == 'piker.clearing'
|
||||||
|
|
||||||
global _router
|
global _router
|
||||||
|
|
||||||
|
|
@ -822,7 +827,7 @@ async def translate_and_relay_brokerd_events(
|
||||||
f'Rx brokerd trade msg:\n'
|
f'Rx brokerd trade msg:\n'
|
||||||
f'{fmsg}'
|
f'{fmsg}'
|
||||||
)
|
)
|
||||||
status_msg: Status | None = None
|
status_msg: Status|None = None
|
||||||
|
|
||||||
match brokerd_msg:
|
match brokerd_msg:
|
||||||
# BrokerdPosition
|
# BrokerdPosition
|
||||||
|
|
@ -1283,7 +1288,7 @@ async def process_client_order_cmds(
|
||||||
and status.resp == 'dark_open'
|
and status.resp == 'dark_open'
|
||||||
):
|
):
|
||||||
# remove from dark book clearing
|
# 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:
|
if entry:
|
||||||
(
|
(
|
||||||
pred,
|
pred,
|
||||||
|
|
|
||||||
|
|
@ -28,12 +28,14 @@ from ..log import (
|
||||||
from piker.types import Struct
|
from piker.types import Struct
|
||||||
subsys: str = 'piker.clearing'
|
subsys: str = 'piker.clearing'
|
||||||
|
|
||||||
log = get_logger(subsys)
|
log = get_logger(
|
||||||
|
name='piker.clearing',
|
||||||
|
)
|
||||||
|
|
||||||
# TODO, oof doesn't this ignore the `loglevel` then???
|
# TODO, oof doesn't this ignore the `loglevel` then???
|
||||||
get_console_log = partial(
|
get_console_log = partial(
|
||||||
get_console_log,
|
get_console_log,
|
||||||
name=subsys,
|
name='clearing',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,10 @@ def pikerd(
|
||||||
'''
|
'''
|
||||||
# from tractor.devx import maybe_open_crash_handler
|
# from tractor.devx import maybe_open_crash_handler
|
||||||
# with maybe_open_crash_handler(pdb=False):
|
# 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:
|
if pdb:
|
||||||
log.warning((
|
log.warning((
|
||||||
|
|
@ -295,7 +298,11 @@ def cli(
|
||||||
@click.option('--tl', is_flag=True, help='Enable tractor logging')
|
@click.option('--tl', is_flag=True, help='Enable tractor logging')
|
||||||
@click.argument('ports', nargs=-1, required=False)
|
@click.argument('ports', nargs=-1, required=False)
|
||||||
@click.pass_obj
|
@click.pass_obj
|
||||||
def services(config, tl, ports):
|
def services(
|
||||||
|
config,
|
||||||
|
tl: bool,
|
||||||
|
ports,
|
||||||
|
):
|
||||||
|
|
||||||
from ..service import (
|
from ..service import (
|
||||||
open_piker_runtime,
|
open_piker_runtime,
|
||||||
|
|
@ -316,7 +323,11 @@ def services(config, tl, ports):
|
||||||
async with (
|
async with (
|
||||||
open_piker_runtime(
|
open_piker_runtime(
|
||||||
name='service_query',
|
name='service_query',
|
||||||
loglevel=config['loglevel'] if tl else None,
|
loglevel=(
|
||||||
|
config['loglevel']
|
||||||
|
if tl
|
||||||
|
else None,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
tractor.get_registry(
|
tractor.get_registry(
|
||||||
addr=addr,
|
addr=addr,
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,9 @@ from ..log import (
|
||||||
)
|
)
|
||||||
subsys: str = 'piker.data'
|
subsys: str = 'piker.data'
|
||||||
|
|
||||||
log = get_logger(subsys)
|
log = get_logger(
|
||||||
|
name=subsys,
|
||||||
|
)
|
||||||
|
|
||||||
get_console_log = partial(
|
get_console_log = partial(
|
||||||
get_console_log,
|
get_console_log,
|
||||||
|
|
|
||||||
56
piker/log.py
56
piker/log.py
|
|
@ -37,35 +37,69 @@ _proj_name: str = 'piker'
|
||||||
|
|
||||||
|
|
||||||
def get_logger(
|
def get_logger(
|
||||||
name: str = None,
|
name: str|None = None,
|
||||||
|
**tractor_log_kwargs,
|
||||||
) -> logging.Logger:
|
) -> 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(
|
return tractor.log.get_logger(
|
||||||
name=name,
|
name=name,
|
||||||
_root_name=_proj_name,
|
pkg_name=pkg_name,
|
||||||
|
**tractor_log_kwargs,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_console_log(
|
def get_console_log(
|
||||||
level: str | None = None,
|
level: str|None = None,
|
||||||
name: str | None = None,
|
name: str|None = None,
|
||||||
|
pkg_name: str|None = None,
|
||||||
|
with_tractor_log: bool = False,
|
||||||
|
**tractor_log_kwargs,
|
||||||
|
|
||||||
) -> logging.Logger:
|
) -> 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(
|
return tractor.log.get_console_log(
|
||||||
level,
|
level=level,
|
||||||
name=name,
|
name=name,
|
||||||
_root_name=_proj_name,
|
pkg_name=pkg_name,
|
||||||
) # our root logger
|
**tractor_log_kwargs,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def colorize_json(
|
def colorize_json(
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
import os
|
import os
|
||||||
from typing import (
|
from typing import (
|
||||||
Optional,
|
|
||||||
Any,
|
Any,
|
||||||
ClassVar,
|
ClassVar,
|
||||||
)
|
)
|
||||||
|
|
@ -59,7 +58,7 @@ async def open_piker_runtime(
|
||||||
registry_addrs: list[tuple[str, int]] = [],
|
registry_addrs: list[tuple[str, int]] = [],
|
||||||
|
|
||||||
enable_modules: list[str] = [],
|
enable_modules: list[str] = [],
|
||||||
loglevel: Optional[str] = None,
|
loglevel: str|None = None,
|
||||||
|
|
||||||
# XXX NOTE XXX: you should pretty much never want debug mode
|
# XXX NOTE XXX: you should pretty much never want debug mode
|
||||||
# for data daemons when running in production.
|
# for data daemons when running in production.
|
||||||
|
|
@ -163,8 +162,7 @@ _root_modules: list[str] = [
|
||||||
@acm
|
@acm
|
||||||
async def open_pikerd(
|
async def open_pikerd(
|
||||||
registry_addrs: list[tuple[str, int]],
|
registry_addrs: list[tuple[str, int]],
|
||||||
|
loglevel: str|None = None,
|
||||||
loglevel: str | None = None,
|
|
||||||
|
|
||||||
# XXX: you should pretty much never want debug mode
|
# XXX: you should pretty much never want debug mode
|
||||||
# for data daemons when running in production.
|
# for data daemons when running in production.
|
||||||
|
|
@ -192,7 +190,6 @@ async def open_pikerd(
|
||||||
|
|
||||||
async with (
|
async with (
|
||||||
open_piker_runtime(
|
open_piker_runtime(
|
||||||
|
|
||||||
name=_root_dname,
|
name=_root_dname,
|
||||||
loglevel=loglevel,
|
loglevel=loglevel,
|
||||||
debug_mode=debug_mode,
|
debug_mode=debug_mode,
|
||||||
|
|
@ -273,7 +270,9 @@ async def maybe_open_pikerd(
|
||||||
|
|
||||||
'''
|
'''
|
||||||
if loglevel:
|
if loglevel:
|
||||||
get_console_log(loglevel)
|
get_console_log(
|
||||||
|
level=loglevel
|
||||||
|
)
|
||||||
|
|
||||||
# subtle, we must have the runtime up here or portal lookup will fail
|
# subtle, we must have the runtime up here or portal lookup will fail
|
||||||
query_name = kwargs.pop(
|
query_name = kwargs.pop(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue