IC Python Logging
A simple logging system for the Internet Computer. Forked from kybra-simple-logging. The library includes in-memory log storage capabilities, providing robust logging for all canister functions including asynchronous operations.
Features
- CLI tool for querying logs directly from canisters to your local machine (including in semi-real time with
--follow) - Works seamlessly in both Internet Computer and non-IC environments
- Avoids using Python's standard logging module (which has compatibility issues in the IC environment)
- Named loggers with
get_logger()function similar to Python's standard library - Support for level-based filtering (DEBUG, INFO, WARNING, ERROR, CRITICAL)
- Global and per-logger log level configuration
- Ability to enable/disable logging completely
- Circular buffer to store logs in memory without exhausting memory
Installation
pip install ic-python-logging
Quick Start
from ic_python_logging import get_logger
# Create a logger
logger = get_logger("my_canister")
# Log messages at a specific level
logger.info("This is an info message")
# Set log level for a specific logger
logger.set_level(LogLevel.DEBUG)
# Use in-memory logging to retrieve logs
from ic_python_logging import get_logs, clear_logs, enable_memory_logging, disable_memory_logging
# Retrieve only ERROR logs
error_logs = get_logs(min_level="ERROR")
# Filter logs by logger name
component_logs = get_logs(logger_name="my_component")
CLI Tool
The package includes a command-line tool for querying logs from canisters. Example:
# View the first 10 ERROR log entries of logger with name MY_LOGGER_NAME, and then follow and poll every 5 seconds, from the canister with ID <CANISTER_ID> on the IC network
kslog <CANISTER_ID> --tail 10 --level ERROR --name MY_LOGGER_NAME --follow --ic --interval 5
To use this kslog with your canister, expose the query function:
# ##### Import Basilisk and the internal function #####
from basilisk import Opt, Record, Vec, nat, query
from ic_python_logging import get_canister_logs as _get_canister_logs
# Define the PublicLogEntry class directly in the test canister
class PublicLogEntry(Record):
timestamp: nat
level: str
logger_name: str
message: str
id: nat
@query
def get_canister_logs(
from_entry: Opt[nat] = None,
max_entries: Opt[nat] = None,
min_level: Opt[str] = None,
logger_name: Opt[str] = None,
) -> Vec[PublicLogEntry]:
"""
Re-export the get_canister_logs query function from the library
This makes it accessible as a query method on the test canister
"""
logs = _get_canister_logs(
from_entry=from_entry,
max_entries=max_entries,
min_level=min_level,
logger_name=logger_name
)
# Convert the logs to our local PublicLogEntry type
return [
PublicLogEntry(
timestamp=log["timestamp"],
level=log["level"],
logger_name=log["logger_name"],
message=log["message"],
id=log["id"],
)
for log in logs
]
Development
# Clone the repository
git clone https://github.com/smart-social-contracts/ic-python-logging.git
cd ic-python-logging
# Recommended setup
pyenv install 3.10.7
pyenv local 3.10.7
python -m venv venv
source venv/bin/activate
pip install ic-basilisk
python -m basilisk install-dfx-extension
# Install development dependencies
pip install -r requirements-dev.txt
# Run linters
./run_linters.sh
# Run tests
cd tests && ./run_test.sh
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
Release files for ic-python-logging 0.3.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ic_python_logging-0.3.4.tar.gz | 13.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ic_python_logging-0.3.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.2 kB
Release files / ic_python_logging-0.3.4.tar.gz
| Download URL | ic_python_logging-0.3.4.tar.gz |
|---|---|
| Size | 13.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e2b471d7adc5faf242bcce69d069921268a850e66c3cfe13a09d63f887274c5f
|
|
BLAKE2b-256 checksum How to use checksums |
9479604c76594df40493f2090b4fd69a4c9d2c9bc765cd3d1a1594629abb5e1d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.20
|
Release files / ic_python_logging-0.3.4-py3-none-any.whl
| Download URL | ic_python_logging-0.3.4-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c5f9fb33917b6d78c97c9311e412ef29c2cdccc7303a925dad1af1d6f1de45cd
|
|
BLAKE2b-256 checksum How to use checksums |
0127567634d8362a43d4dc2bc8d2065f88855c47df1c8c88e3bb1938695f7765
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.20
|