Loading SyntropySoft...

The same observability contract in Node.js, Python and .NET

Not three libraries that look alike. One specification, implemented idiomatically in each language — and proven by the same test fixture running in all of them.

Your stack speaks three languages. Your logs speak three dialects.

A request crosses your Node gateway, your Python worker and your .NET service.

Three loggers. Three ways of masking a credit card. Three names for the same correlation id. Three answers to “what happens when the log sink goes down”.

Correlating that request means reconciling three different truths — by hand, at 3 a.m., while someone waits.

SyntropyLog

Declarative PII masking, context that survives async boundaries, and a logging path that never throws — in the languages your stack already uses.

LanguagePackageVersionNotes
Node.jssyntropylog · npm2.1.0Native Rust engine
Pythonslpy-log · PyPI2.0.0CPython 3.7+ · optional Rust engine
.NETsl4n · NuGet1.1.0net8.0 · Native AOT
JavaIn development

How we think about observability

Four decisions that are already in the code. They are why the implementations agree — and why, where they don't, they don't by choice.

  • The logging path never throws

    If your logger can crash your request handler, it is not an observability tool — it is a new failure mode. A failure goes to a hook and a counter. Never to your caller.

  • A masking strategy is data, not code

    Adding a strategy shouldn't mean writing the same function in four languages. It is a spec the engine interprets — which is why the output can be identical everywhere.

  • Wire names belong to your services, not to us

    Your gateway calls it x-request-id and the legacy service calls it X-Correlation. Each service declares its own map and the id survives the translation. Headers don't have to agree.

  • Parity is proven by a test, not by a document

    The same seventeen masking cases — literally the same file, byte for byte — run in the Node, Python and Java suites. If an implementation drifts, its build turns red.

Start with your language

Install it, and the defaults already mask passwords, tokens, emails and card numbers.

Node.js

npm install syntropylog

Python

pip install slpy-log

.NET

dotnet add package sl4n

Every implementation is Apache 2.0 and has zero required runtime dependencies.

Built by developers, for developers

Our passion is solving real problems. We build high-quality software with a strong commitment to open source and to the community.

Open source commitment

  • Permissive license:Everything we publish is licensed under Apache 2.0.
  • Contributions welcome:We believe in the power of collaboration.
  • Support us on GitHub:A star on our repositories helps us grow.

Other ways to support

  • Star on GitHub

    Help more developers discover SyntropyLog.

    Go to GitHub
  • Report Issues

    Help improve the project by reporting bugs or suggestions.

    View Issues
  • Share

    Share SyntropyLog with your team and community.

    Share on X