logx
Python implementation of structured logging compatible with NETSTARS log specification v1.3
Introduction
logx is a universal logging library that conforms to the NETSTARS log specification requirements. By default, it supports NETSTARS Log Specification v1.3. Under specification v1.3, logx outputs logs in JSON format, as shown in the following example:
{"compliance":"1.3","log_app_id":"test_app_id","log_app_version":"0.1","log_category":"srv-exception-log","log_event_id":"","log_event_time":"2022-01-21T10:53:21.774+09:00","log_level":"fatal","log_time":"2022-01-21T10:53:21.774+09:00","message":"this is a test message"}
JSON format logs can nest JSON, and newlines and double quotes in key-value content are automatically escaped.
During development and debugging, you can set the compliance level to "0" to output simple semicolon-separated log information:
2022-01-21T10:56:43.901+09:00 [INF] item_1: 23; log_event_time: 2022-01-21T10:56:43.901+09:00; message: this is a test message
Note: Specification v1.3 meets SLA requirements and can be parsed by Elasticsearch; specification 0 is only recommended for development and testing phases.
Log Levels
Log levels in logx are integers conforming to the v1.3 log specification. Valid range is [0,6], where 0 means no log output, and 1-6 correspond to fatal, error, warn, info, debug, trace respectively. Larger values provide richer output information. The maximum output log level can be specified in the logx.init() initialization method to control the level of detail. You can also dynamically adjust the maximum log output level using the logx.set_max_level() method.
Usage
Complete Usage Example
from logx import init, errorf, Log, InfoLvl, New, CustomItem, DebugLvl
# Initialize logging
init(DebugLvl, "my_app", "1.0.0", "1.3") # Set to debug level to show all logs
# Simple log output
errorf("用户登录失败: %s", "密码错误")
# Custom log items
Log(InfoLvl, "用户操作",
CustomItem("user_id", "12345"),
CustomItem("action", "login"))
# Use Loggerz object
logger = New(
CustomItem("service", "user-service"),
CustomItem("version", "1.0.0"),
)
logger.printf("处理用户请求: %s", "GET /api/users")
Output
Running the above code will output the following JSON formatted logs:
{"compliance":"1.3","log_app_id":"my_app","log_app_version":"1.0.0","log_category":"srv-exception-log","log_event_id":"","log_event_time":"2025-10-22T19:58:30.785+08:00","log_level":"error","log_time":"2025-10-22T19:58:30.785+08:00","message":"用户登录失败: 密码错误"}
{"compliance":"1.3","log_app_id":"my_app","log_app_version":"1.0.0","log_category":"srv-biz-process-log","log_event_id":"","log_event_time":"2025-10-22T19:58:30.785+08:00","log_level":"info","log_time":"2025-10-22T19:58:30.785+08:00","message":"用户操作","user_id":"12345","action":"login"}
{"compliance":"1.3","log_app_id":"my_app","log_app_version":"1.0.0","log_category":"srv-biz-process-log","log_event_id":"","log_event_time":"2025-10-22T19:58:30.785+08:00","log_level":"info","log_time":"2025-10-22T19:58:30.785+08:00","message":"处理用户请求: GET /api/users","service":"user-service","version":"1.0.0"}
Detailed Description
-
Initialization: Call the
logx.init()method at program startup to set the maximum output log level. Usually this method is called in themain()function, and the parameter values can be provided through the application's configuration file.DebugLvl: Sets the log level to debug, which outputs all level logs"my_app": Application ID"1.0.0": Application version number"1.3": Log specification version number. If "0" is specified, simple information is output, recommended only during debugging
-
Simple log output: Use methods like
logx.printf(),logx.errorf()to output simple log information:
logx.errorf("用户登录失败: %s", "密码错误")
- Custom log items: Use
logx.log()andlogx.CustomItem()methods to achieve maximum flexibility in log information customization:
logx.Log(InfoLvl, "用户操作",
CustomItem("user_id", "12345"),
CustomItem("action", "login"))
- Using Loggerz objects: Use the
logx.new()method to create a new Loggerz object and save some common log information, so you don't have to manually pass this information each time:
logger = logx.new(
CustomItem("service", "user-service"),
CustomItem("version", "1.0.0"),
)
logger.printf("处理用户请求: %s", "GET /api/users")
Installation
From PyPI (Recommended)
pip install 0xnetx-logx
From GitHub
pip install git+https://github.com/0xNetx/logx.git
From Local Directory
If you've cloned the repository:
cd logx
pip install -e .
Or install directly:
pip install -e /path/to/logx
Version
- v0.0.1: Initial release version with complete log formatting functionality
- Supports NETSTARS v1.3 specification JSON format output
- Supports simple text format output (compliance 0)
- Includes hook mechanism and Loggerz object functionality
API Reference
Constants
DisabledLvl = 0: No log outputFatalLvl = 1: Fatal errorErrorLvl = 2: General errorWarnLvl = 3: WarningInfoLvl = 4: General infoDebugLvl = 5: Debug informationTraceLvl = 6: Trace information
Functions
Initialization
init(level, app_id, app_version, compliance): Initialize log configurationset_max_level(level): Set maximum log output levelget_max_level(): Get maximum log output level
Logging Functions
log(level, message, *log_items): Log a message with specified levelfatal(*args): Log fatal messageerror(*args): Log error messagewarn(*args): Log warning messageprint(*args): Log info messagedebug(*args): Log debug messagetrace(*args): Log trace message
Each level also has *f (formatted) and *ln (with newline) variants.
Options
CustomItem(key, value): Add custom log itemCompliance(version): Set compliance versionLogTime(time): Set log timeEventTime(time): Set event timeLevel(level): Set log levelCategory(category): Set log categoryAppId(app_id): Set application IDAppVersion(version): Set application versionEventId(event_id): Set event ID
Objects
new(*items)->Loggerz: Create a new logger object
Loggerz Class
The Loggerz class provides all the functionality of the global functions plus:
enable_log_elapsed_time(): Enable elapsed time trackingget_items(): Get all log itemsset_items(*items): Update log itemsadd_hook(hook): Add a hook function
Metadata
Release files for 0xnetx-logx 0.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| 0xnetx_logx-0.0.2.tar.gz | 10.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 0xnetx_logx-0.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.7 kB
Release files / 0xnetx_logx-0.0.2.tar.gz
| Download URL | 0xnetx_logx-0.0.2.tar.gz |
|---|---|
| Size | 10.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
296e3ab5c39d5677d6e22a455d925d1c5daca6c79170fed04417f0dabfa6df4f
|
|
BLAKE2b-256 checksum How to use checksums |
06fc243d6837f615780f41cf20556a4641f245a25382d604414482a9d99f3895
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.13
|
Release files / 0xnetx_logx-0.0.2-py3-none-any.whl
| Download URL | 0xnetx_logx-0.0.2-py3-none-any.whl |
|---|---|
| Size | 12.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2c2ebb920d7726314933eb029c1f3d5f8b018e983ff553eee424adf734388b3a
|
|
BLAKE2b-256 checksum How to use checksums |
0fa12b6129abbc6e2c3b18aab8a2712a32d82d5371aefd1b7950ddc8cb0fca90
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.13
|
Security for 0xnetx-logx 0.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.