Skip to main content

sysstra-logging

Shared structured (JSON-line) logging for Sysstra services. Stdlib-only — zero install dependencies — so lean scripts (data-collection streamers, cron jobs) can pick it up without pulling in the full sysstra SDK (pandas/numpy/numba/redis/pymongo).

from sysstra_logging import get_logger, bind, clear_context

logger = get_logger("syss_sha_eios", log_file="logs/syss_sha_eios.log",
                    service="sysstra-trading-strategies")

bind(mode="lt", request_id=request_id, strategy="syss_sha_eios")
logger.info("order placed", extra={"order_id": order_id})

The identity block

Every line carries these 13 fields, in this order, blank when unknown — whether or not the writing service knows anything about them:

ts  level  schema  service  component  env  host  tenant  market  event  status  logger  message

That is what lets one Alloy config and one dashboard panel work across every repo: a consumer can group by repo, host, market or environment without knowing which service wrote the line.

  • service names the repo (sysstra-data-collection-in) and comes from each repo's own SERVICE constant in its *_common.py. SERVICE in the environment overrides it; the logger name is the last-resort fallback.
  • logger is the per-script or per-request logger name (syss_sha_eod-vt-<request_id>). It used to be passed into service's slot, so every line reported a request id as its service and nothing could group by repo.
  • component says which part of a repo a line came from (streamer, common_runner, instance-orchestrator) — bind it where a repo has meaningful sub-parts.
  • env defaults to prod; host falls back to socket.gethostname() because HOSTNAME is a shell variable and is often not exported.

Precedence for each field: extra=bind() → environment → default.

Domain fields

Everything else appears only where it appliesrequest_id, mode, strategy on the trading repos; segment, session on data collection; job, run_id on batch work. They are deliberately not blank-padded: a request_id: "" on a collection line would be indistinguishable from a trading line that failed to populate one, and collection has no such concept.

request_id is the Mongo {mode}_requests._id and is never generated. Batch jobs get run_id instead, so a query for one can never pick up the other.

Batch jobs

from sysstra_logging import get_logger, job_run

logger = get_logger("s3_sync", log_file=..., service="sysstra-data-services")

with job_run(logger, "s3_sync"):
    sync_bucket()

Emits job_start / job_complete / job_failed with duration_s, and binds job and run_id for the duration so every line the job logs in between is correlated too. Failures re-raise, so a cron job still exits non-zero.

Notes

Set LOG_FORMAT=text for a human-readable formatter during local dev / tail -f; the default is single-line JSON.

clear_context() must be called at the start of every unit of work (Celery task, HTTP request) that reuses a process/thread — otherwise bound fields from a previous task (most dangerously mode, paper vs. real-money) leak into the next one's log lines.

See sysstra_logging/logging_utils.py for the full API (bound(), get_context(), redirect_stdout_to(), ScrubFilter).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sysstra_logging-0.3.0.tar.gz (15.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sysstra_logging-0.3.0-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file sysstra_logging-0.3.0.tar.gz.

File metadata

  • Download URL: sysstra_logging-0.3.0.tar.gz
  • Upload date:
  • Size: 15.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for sysstra_logging-0.3.0.tar.gz
Algorithm Hash digest
SHA256 cc7ddcf089091c16030c43f40221ff05e056bae87a411e56e95487dbe8cdbe8d
MD5 01dc9e0ec2bd100ade58f7593da4b9b5
BLAKE2b-256 90784e57262f297e236d30890b4e058bd65c6aa415edb5e3696d2d25423318b2

See more details on using hashes here.

File details

Details for the file sysstra_logging-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sysstra_logging-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c7e7b35ed6feac4142afdde44c5bf0f10104e60477ec074f9c1c1786ac9393b3
MD5 40a69af3b07d76941283fdace689db25
BLAKE2b-256 c1334efa2688511956ccb10d1e4d3e2e634859b2eb3e599bd84ae9dd1cc9a256

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.1

2 files

0.4.0

2 files

This release

0.3.0 This release

2 files

0.2.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page