A modern, production-ready Python logging framework with zero configuration.
Quick Start • Features • Configuration • Handlers • Kafka Streaming • CLI • API Reference • Full Docs
Table of Contents
- Features
- Installation
- Quick Start
- Configuration
- Handlers
- Sensitive Data Masking
- Context Injection
- Kafka Streaming
- CLI Tool
- API Reference
- Examples
- Project Structure
- Contributing
- License
Features
| Feature | Description |
|---|---|
| Colored Console Output | Beautiful, readable logs with color-coded levels |
| Rotating File Logs | Auto-rotating log files with size limits and backup |
| Remote HTTP Streaming | Send logs to any HTTP endpoint in real-time |
| Kafka Streaming | Stream logs to Apache Kafka with Avro serialization |
| Sensitive Data Masking | Auto-mask passwords, tokens, and API keys |
| JSON Mode | Structured JSON logging for log aggregators |
| YAML + ENV Config | Configure via yaml file, environment, or code |
| Zero Config Mode | Works out of the box with sensible defaults |
| CLI Tool | Inspect configuration from command line |
| Global Registration | Use setup_logify() for framework-level integration |
| Context Injection | Add request_id, user_id to logs with ContextLoggerAdapter |
| Thread-Safe | Queue-based async architecture for non-blocking remote logging |
| Hot Reload | Reload configuration without restarting your application |
| Graceful Shutdown | Automatic flush of pending logs on program exit |
Installation
pip install logifyx
For Kafka streaming support:
pip install logifyx[kafka]
Dependencies:
python-json-logger- JSON formattingpyyaml- YAML configurationconcurrent-log-handler- Multi-process safe file handlingrequests- HTTP remote loggingpython-dotenv- Environment variable loadingaiokafka- Async Kafka producer (optional)fastavro- Avro serialization (optional)
Quick Start
Basic Usage (Zero Config)
from logifyx import Logifyx
log = Logifyx(name="myapp")
log.info("Application started")
log.warning("This is a warning")
log.error("Something went wrong")
If you do not pass file=..., Logifyx writes to <name>.log by default, so the example above creates myapp.log.
Full Configuration
from logifyx import Logifyx
log = Logifyx(
name="auth-service",
file="auth.log",
log_dir="logs",
color=True,
mask=True, # Auto-mask sensitive data
remote_url="http://localhost:5000/logs",
kafka_servers="localhost:9092",
kafka_topic="app-logs"
)
log.info("Server started on port 8080")
log.warning("password=secret123 token=abc") # Masked: **** ****
log.error("Authentication failed", exc_info=True)
Global Registration (Recommended for Large Apps)
from logifyx import setup_logify, get_logify_logger
# Call once at app startup
setup_logify()
# Now use get_logify_logger anywhere in your app
log = get_logify_logger("auth", file="auth.log")
api_log = get_logify_logger("api", file="api.log")
Context Injection (Request Tracking)
from logifyx import Logifyx, ContextLoggerAdapter
log = Logifyx(name="auth")
# Wrap with context for request-scoped logging
request_log = ContextLoggerAdapter(
log,
{"request_id": "req-abc123", "user_id": 42}
)
request_log.info("User authenticated")
# Output: request_id=req-abc123 user_id=42 | User authenticated
Graceful Shutdown
from logifyx import Logifyx, flush, shutdown
log = Logifyx(name="myapp", remote_url="http://localhost:5000/logs")
log.info("Processing request")
# Option 1: Wait for queued logs without stopping (use in servers)
flush(timeout=5.0)
# Option 2: Full shutdown (called automatically via atexit)
shutdown()
Configuration
Logifyx supports multiple configuration sources with clear priority:
Python Code Arguments > Environment Variables > logifyx.yaml > Defaults
1. Python Code (Highest Priority)
from logifyx import Logifyx
log = Logifyx(
name="myapp",
level="DEBUG",
color=True,
file="myapp.log",
log_dir="logs",
mask=True
)
2. Environment Variables
Set environment variables with the LOG_ prefix:
# Linux/macOS
export LOG_LEVEL=DEBUG
export LOG_FILE=app.log
export LOG_COLOR=True
export LOG_KAFKA_SERVERS=localhost:9092
# Windows PowerShell
$env:LOG_LEVEL = "DEBUG"
$env:LOG_FILE = "app.log"
Or use a .env file (loaded automatically via python-dotenv):
LOG_LEVEL=DEBUG
LOG_FILE=app.log
LOG_DIR=logs
LOG_COLOR=True
LOG_MASK=True
Sample .env File
Here's a complete .env file with all available options:
# ===========================================
# Logifyx Configuration - Sample .env File
# ===========================================
# ---- Core Settings ----
LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR, CRITICAL
# ---- Output Settings ----
LOG_FILE=app.log # Log file name
LOG_DIR=logs # Directory for log files
LOG_COLOR=True # Enable colored console output
LOG_JSON=False # Enable JSON formatted logs
LOG_MASK=True # Mask sensitive data (passwords, tokens, etc.)
# ---- File Rotation ----
LOG_MAX_BYTES=10000000 # Max file size before rotation (10MB)
LOG_BACKUP_COUNT=5 # Number of backup files to keep
# ---- Remote HTTP Logging ----
LOG_REMOTE=http://localhost:5000/logs # HTTP endpoint URL
LOG_REMOTE_TIMEOUT=5 # Request timeout in seconds
LOG_REMOTE_RETRIES=3 # Max failures before disabling
LOG_REMOTE_HEADERS={"Content-Type": "application/json", "Authorization": "Bearer your-token"} # Custom HTTP headers (JSON format)
# ---- Kafka Streaming ----
LOG_KAFKA_SERVERS=localhost:9092 # Kafka bootstrap servers (comma-separated)
LOG_KAFKA_TOPIC=app-logs # Kafka topic name
LOG_SCHEMA_REGISTRY=http://localhost:8081 # Confluent Schema Registry URL
LOG_SCHEMA_COMPATIBILITY=BACKWARD # BACKWARD, FORWARD, FULL, NONE
Note: Add
.envto your.gitignoreto avoid committing secrets.
3. YAML Configuration File
Create a logifyx.yaml file in your project root:
# Logging Settings
LOG_LEVEL: DEBUG
LOG_FILE: app.log
LOG_DIR: logs
LOG_COLOR: True
LOG_JSON: False
LOG_MASK: True
# File Rotation
LOG_MAX_BYTES: 10000000
LOG_BACKUP_COUNT: 5
# Remote HTTP Streaming
LOG_REMOTE: http://localhost:5000/logs
LOG_REMOTE_TIMEOUT: 5
LOG_REMOTE_RETRIES: 3
LOG_REMOTE_HEADERS:
Content-Type: application/json
Authorization: Bearer your-token
# Kafka Streaming
LOG_KAFKA_SERVERS: localhost:9092
LOG_KAFKA_TOPIC: app-logs
LOG_SCHEMA_REGISTRY: http://localhost:8081
LOG_SCHEMA_COMPATIBILITY: BACKWARD
All Configuration Options
Core Settings
| Option | Env Variable | YAML Key | Default | Description |
|---|---|---|---|---|
name |
- | - | "app" |
Logger name (identifies the service) |
level |
LOG_LEVEL |
LOG_LEVEL |
"INFO" |
Minimum log level. One of: DEBUG INFO WARNING ERROR CRITICAL NOTSET. Invalid values raise ValueError. |
Output Settings
| Option | Env Variable | YAML Key | Default | Description |
|---|---|---|---|---|
file |
LOG_FILE |
LOG_FILE |
<name>.log |
Log file name. Defaults to the logger name (e.g. myapp.log) if not set anywhere. |
log_dir |
LOG_DIR |
LOG_DIR |
"logs" |
Directory for log files |
color |
LOG_COLOR |
LOG_COLOR |
True |
Colorize console output. Python: True/False only. Env/YAML: true/false only. |
json_mode |
LOG_JSON |
LOG_JSON |
False |
Emit each line as JSON. Mutually exclusive with color — json_mode wins if both are set. |
mask |
LOG_MASK |
LOG_MASK |
True |
Redact passwords, tokens, and secrets in all output. |
File Rotation Settings
| Option | Env Variable | YAML Key | Default | Constraint | Description |
|---|---|---|---|---|---|
max_bytes |
LOG_MAX_BYTES |
LOG_MAX_BYTES |
10000000 |
int, >= 1 | Rotate the file when it reaches this size in bytes. |
backup_count |
LOG_BACKUP_COUNT |
LOG_BACKUP_COUNT |
5 |
int, >= 0 | Number of rotated backup files to keep. 0 keeps none. |
Remote HTTP Settings
| Option | Env Variable | YAML Key | Default | Constraint | Description |
|---|---|---|---|---|---|
remote_url |
LOG_REMOTE |
LOG_REMOTE |
None |
str | HTTP endpoint URL |
remote_timeout |
LOG_REMOTE_TIMEOUT |
LOG_REMOTE_TIMEOUT |
5 |
int, >= 1 | Request timeout in seconds |
max_remote_retries |
LOG_REMOTE_RETRIES |
LOG_REMOTE_RETRIES |
3 |
int, >= 0 | Failures before the remote handler self-disables |
remote_headers |
LOG_REMOTE_HEADERS |
LOG_REMOTE_HEADERS |
{"Content-Type": "application/json"} |
dict[str, str] | Custom HTTP headers. In env/.env: JSON string. In YAML: nested mapping. |
Kafka Settings
| Option | Env Variable | YAML Key | Default | Description |
|---|---|---|---|---|
kafka_servers |
LOG_KAFKA_SERVERS |
LOG_KAFKA_SERVERS |
None |
Kafka bootstrap servers. str or list[str]. |
kafka_topic |
LOG_KAFKA_TOPIC |
LOG_KAFKA_TOPIC |
"logs" |
Kafka topic name |
schema_registry_url |
LOG_SCHEMA_REGISTRY |
LOG_SCHEMA_REGISTRY |
None |
Schema Registry URL |
schema_compatibility |
LOG_SCHEMA_COMPATIBILITY |
LOG_SCHEMA_COMPATIBILITY |
"BACKWARD" |
Schema compatibility mode. One of: BACKWARD BACKWARD_TRANSITIVE FORWARD FORWARD_TRANSITIVE FULL FULL_TRANSITIVE NONE. |
Log Levels
| Level | Value | Description |
|---|---|---|
DEBUG |
10 | Detailed information for debugging |
INFO |
20 | General operational information |
WARNING |
30 | Something unexpected happened |
ERROR |
40 | A serious problem occurred |
CRITICAL |
50 | Program may not be able to continue |
Handlers
Logifyx writes logs to multiple destinations simultaneously:
| Handler | Description | Auto-enabled |
|---|---|---|
| Console | Colored stdout output | ✅ Always |
| File | Rotating file with backups | ✅ Always |
| Remote HTTP | POST to HTTP endpoint | When remote_url set |
| Kafka | Stream to Kafka topic | When kafka_servers set |
Console Handler
Always enabled. Writes logs to stdout with optional color coding.
Color Mapping
| Level | Color |
|---|---|
| DEBUG | Cyan |
| INFO | Green |
| WARNING | Yellow |
| ERROR | Red |
| CRITICAL | Bold Red |
log = Logifyx(name="myapp", color=True)
Example Output
2026-06-11 19:45:17 | INFO | myapp:<module>:42 - Server started
2026-06-11 19:45:18 | WARNING | myapp:<module>:56 - High memory usage
2026-06-11 19:45:19 | ERROR | myapp:handle_request:78 - Connection failed
File Handler
Always enabled. Writes logs to a rotating file with automatic backup management.
Features
- Rotating files: Automatically rotates when file reaches size limit
- Backup management: Keeps N backup files, deletes oldest
- Concurrent-safe: Uses
ConcurrentRotatingFileHandlerfor multi-process safety - Auto-creates directory: Creates log directory if it doesn't exist
log = Logifyx(
name="myapp",
file="myapp.log", # Log file name
log_dir="logs", # Directory for logs
max_bytes=10_000_000, # 10MB max file size
backup_count=5 # Keep 5 backup files
)
File Structure
logs/
├── myapp.log # Current log file
├── myapp.log.1 # Previous (most recent backup)
├── myapp.log.2 # Older backup
├── myapp.log.3
├── myapp.log.4
└── myapp.log.5 # Oldest backup
Remote HTTP Handler
Enabled when remote_url is set. Sends log records to an HTTP endpoint via POST requests.
Features
- Queue-based async: Uses
QueueHandler+QueueListenerfor non-blocking sends - Thread-safe: Internal locking for safe concurrent access
- Auto-retry: Retries on failures
- Circuit breaker: Disables after N consecutive failures (default: 3)
- JSON payload: Structured log data with exception info
Architecture
Logifyx Logger
↓
QueueHandler (instant, non-blocking)
↓
QueueListener (background thread)
↓
RemoteHandler → HTTP POST
log = Logifyx(
name="myapp",
remote_url="http://localhost:5000/logs",
remote_timeout=5,
max_remote_retries=3,
remote_headers={"Authorization": "Bearer token"}
)
Payload Format
{
"level": "INFO",
"message": "2024-02-11 15:30:45 - auth - INFO - User logged in",
"service": "auth-service",
"timestamp": 1707666000.123456,
"file": "/app/auth/login.py",
"line": 42,
"func": "handle_login",
"exception": null
}
Example Flask Server
from flask import Flask, request
app = Flask(__name__)
@app.route('/logs', methods=['POST'])
def receive_logs():
log_data = request.json
print(f"[{log_data['level']}] {log_data['service']}: {log_data['message']}")
return {"status": "received"}, 200
if __name__ == '__main__':
app.run(port=5000)
Kafka Handler
Enabled when kafka_servers is set. Streams logs to Apache Kafka with Avro serialization.
See Kafka Streaming section for detailed documentation.
Sensitive Data Masking
Logifyx automatically masks sensitive data patterns in all handlers:
log = Logifyx(name="auth", mask=True)
log.info("User login password=secret123 token=abc123")
# Output: User login **** ****
Masked Patterns
| Pattern | Example |
|---|---|
password=... |
password=secret123 → **** |
token=... |
token=abc123 → **** |
secret=... |
secret=mykey → **** |
api_key=... |
api_key=xyz → **** |
access_key=... |
access_key=123 → **** |
access_token=... |
access_token=tok → **** |
Context Injection
Use ContextLoggerAdapter to inject structured context (request_id, user_id, etc.) into logs:
from logifyx import Logifyx, ContextLoggerAdapter
log = Logifyx(name="auth")
# Wrap logger with context for request-scoped logging
request_log = ContextLoggerAdapter(
log,
{"request_id": "abc123", "user_id": 42, "session": "sess-xyz"}
)
request_log.info("User authenticated")
# Text output: request_id=abc123 user_id=42 session=sess-xyz | User authenticated
# JSON output (if json_mode=True): includes context in extra fields
Use Cases
- Request tracking: Add
request_idfor distributed tracing - User context: Include
user_idfor audit logs - Multi-tenant: Add
tenant_idfor SaaS applications
Kafka Streaming
Stream logs to Apache Kafka with Avro serialization and Schema Registry support.
Features
- Async Producer: Non-blocking log delivery using
aiokafka - Avro Serialization: Efficient binary format with schema validation
- Schema Registry: Confluent Schema Registry integration
- Schema Evolution: BACKWARD, FORWARD, FULL compatibility modes
- Circuit Breaker: Automatic disable after repeated failures
- Compression: Gzip compression for efficient network usage
Quick Start
1. Install Dependencies
pip install aiokafka fastavro
2. Start Kafka (Docker)
Create a docker-compose.yml:
version: '3.8'
services:
kafka:
image: obsidiandynamics/kafka
restart: "no"
ports:
- "2181:2181"
- "9092:9092"
- "29092:29092"
environment:
KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9092"
KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka:29092,EXTERNAL://localhost:9092"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
KAFKA_ZOOKEEPER_SESSION_TIMEOUT: "6000"
KAFKA_RESTART_ATTEMPTS: "10"
KAFKA_RESTART_DELAY: "5"
ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: "0"
schema-registry:
image: confluentinc/cp-schema-registry:7.5.0
container_name: schema-registry
depends_on:
kafka:
condition: service_healthy
ports:
- "8081:8081"
environment:
SCHEMA_REGISTRY_HOST_NAME: schema-registry
SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://kafka:29092
docker-compose up -d
3. Use Kafka Logging
from logifyx import Logifyx
log = Logifyx(
name="myapp",
kafka_servers="localhost:9092",
kafka_topic="app-logs",
schema_registry_url="http://localhost:8081",
schema_compatibility="BACKWARD"
)
log.info("This message goes to Kafka!")
Avro Schema
Logs are serialized using this Avro schema:
{
"type": "record",
"name": "LogRecord",
"namespace": "com.logifyx.logs",
"doc": "Log record schema v1",
"fields": [
{"name": "level", "type": "string", "doc": "Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)"},
{"name": "message", "type": "string", "doc": "Log message"},
{"name": "service", "type": "string", "doc": "Service/logger name"},
{"name": "timestamp", "type": "string", "doc": "ISO8601 timestamp"},
{"name": "file", "type": ["null", "string"], "default": null, "doc": "Source file path"},
{"name": "line", "type": ["null", "int"], "default": null, "doc": "Line number"},
{"name": "function", "type": ["null", "string"], "default": null, "doc": "Function name"},
{"name": "exception", "type": ["null", "string"], "default": null, "doc": "Exception traceback if any"},
{"name": "extra", "type": ["null", "string"], "default": null, "doc": "Extra JSON data"},
{"name": "schema_version", "type": "int", "default": 1, "doc": "Schema version for evolution"}
]
}
Schema Compatibility Modes
| Mode | Description | Use Case |
|---|---|---|
BACKWARD |
New schema can read old data | Adding optional fields |
BACKWARD_TRANSITIVE |
All previous schemas | Strict backward compatibility |
FORWARD |
Old schema can read new data | Removing optional fields |
FORWARD_TRANSITIVE |
All future schemas | Strict forward compatibility |
FULL |
Both backward and forward | Most restrictive |
FULL_TRANSITIVE |
All versions both ways | Maximum compatibility |
NONE |
No compatibility checks | Development only |
Recommended: BACKWARD Compatibility
- ✅ Adding new optional fields (with defaults)
- ✅ Adding new fields with default values
- ❌ Removing fields
- ❌ Changing field types
Consuming Logs
Python Consumer
import asyncio
import json
from aiokafka import AIOKafkaConsumer
async def consume_logs():
consumer = AIOKafkaConsumer(
'app-logs',
bootstrap_servers='localhost:9092',
auto_offset_reset='earliest',
group_id='log-viewer'
)
await consumer.start()
print("Listening for logs...")
try:
async for msg in consumer:
try:
log = json.loads(msg.value.decode('utf-8'))
except:
# Handle Avro (skip 5-byte header)
import fastavro, io
from logifyx.kafka import LOG_SCHEMA_V1
from fastavro.schema import parse_schema
data = msg.value[5:] if msg.value[0] == 0 else msg.value
schema = parse_schema(LOG_SCHEMA_V1)
log = fastavro.schemaless_reader(io.BytesIO(data), schema)
print(f"[{log['level']}] {log['service']}: {log['message']}")
finally:
await consumer.stop()
asyncio.run(consume_logs())
Kafka Console Consumer
docker exec -it kafka kafka-console-consumer \
--bootstrap-server localhost:9092 \
--topic app-logs \
--from-beginning
Production Configuration
Multiple Brokers
log = Logifyx(
name="myapp",
kafka_servers="kafka1:9092,kafka2:9092,kafka3:9092",
kafka_topic="app-logs"
)
Troubleshooting
| Error | Solution |
|---|---|
KafkaConnectionError |
Ensure Kafka is running: docker-compose ps |
Schema registry connection failed |
Wait 30-60s after startup, check curl http://localhost:8081 |
ImportError: aiokafka |
Install: pip install aiokafka fastavro |
CLI Tool
Inspect your Logifyx configuration from the command line.
Commands
logifyx --config
Display the resolved configuration from all sources:
logifyx --config
Output:
Logifyx Configuration (logifyx.yaml: found):
{
"level": "DEBUG",
"color": true,
"max_bytes": 10000000,
"backup_count": 5,
"log_dir": "logs",
"file": "app.log",
"json_mode": false,
"mask": true,
"remote_url": null,
"kafka_servers": "localhost:9092",
"kafka_topic": "logs",
"schema_registry_url": null,
"schema_compatibility": "BACKWARD",
"remote_timeout": 5,
"max_remote_retries": 3,
"remote_headers": {"Content-Type": "application/json"}
}
logifyx --help
logifyx --help
Use Cases
# Verify config before deployment
logifyx --config
# Check specific settings
logifyx --config | grep kafka
# Compare environments
logifyx --config > config-snapshot.json
API Reference
Logifyx Class
Main logger class extending logging.Logger.
from logifyx import Logifyx
log = Logifyx(
name: str = "app", # Logger name
level: int = logging.NOTSET, # Log level
json_mode: bool = None, # JSON output
remote_url: str = None, # HTTP endpoint
log_dir: str = None, # Log directory
mask: bool = None, # Mask sensitive data (default: True)
color: bool = None, # Colored output
backup_count: int = None, # Backup files count
max_bytes: int = None, # Max file size
file: str = None, # Log filename
kafka_servers: str = None, # Kafka bootstrap servers
kafka_topic: str = None, # Kafka topic
schema_registry_url: str = None, # Schema Registry URL
schema_compatibility: str = None, # Schema compatibility
remote_timeout: int = None, # HTTP timeout
max_remote_retries: int = None, # HTTP max retries
remote_headers: dict = None # HTTP headers
)
Methods
| Method | Description |
|---|---|
configure(**kwargs) |
Configure the logger with all options |
reload() |
Reload logger configuration and handlers |
reload_from_file() |
Reload configuration from logifyx.yaml |
ContextLoggerAdapter Class
Adapter for injecting structured context into logs.
from logifyx import ContextLoggerAdapter
adapter = ContextLoggerAdapter(
logger: Logifyx, # Base logger
extra: dict # Context dictionary
)
get_logify_logger() Function
Get or create a configured Logifyx logger instance.
from logifyx import get_logify_logger
log = get_logify_logger(
name: str, # Logger name (singleton per name)
**kwargs # Same options as Logifyx constructor
)
Note: Requires calling setup_logify() first.
setup_logify() Function
Register Logifyx as the global logger class.
from logifyx import setup_logify
setup_logify() # Call once at app startup
flush() Function
Wait for queued logs to be sent without stopping the listener.
from logifyx import flush
success = flush(timeout: float = 5.0) # Returns True if drained
shutdown() Function
Explicitly flush and stop all async logging handlers.
from logifyx import shutdown
shutdown() # Call before application exits
Note: Automatically registered with atexit, but call explicitly for immediate cleanup.
Examples
Basic Demo
from logifyx import Logifyx, ContextLoggerAdapter, get_logify_logger, setup_logify, flush
# Direct instantiation
log = Logifyx(
name="auth",
file="auth.log",
color=True,
mask=True
)
log.info("Server started")
log.warning("password=123456 token=abcd123") # Masked
log.error("Login failed")
# Global registration
setup_logify()
api_log = get_logify_logger("api", file="api.log")
api_log.info("API endpoint hit")
# Context injection
request_log = ContextLoggerAdapter(
log,
{"request_id": "req-abc123", "user_id": 42}
)
request_log.info("User authenticated")
# Cleanup
flush(timeout=5.0)
Kafka Demo
from logifyx import Logifyx
log = Logifyx(
name="kafka-demo",
kafka_servers="localhost:9092",
kafka_topic="app-logs",
schema_registry_url="http://localhost:8081",
schema_compatibility="BACKWARD",
color=True
)
log.info("Application started")
log.debug("Debug message")
log.warning("Warning message")
try:
1 / 0
except Exception:
log.error("Exception occurred", exc_info=True)
log.info("Application finished")
Project Structure
logifyx/
├── __init__.py # Package exports
├── core.py # Main Logifyx class
├── config.py # Configuration loading
├── handler.py # Handler factory
├── formatter.py # Log formatters
├── filters.py # Sensitive data masking
├── presets.py # (reserved)
├── remote.py # HTTP remote handler
├── kafka.py # Kafka + Avro handler
└── cli.py # CLI tool
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
License
MIT License - see LICENSE for details.
Made with ❤️ by Madhur Prakash
Metadata
Release files for logifyx 1.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| logifyx-1.1.3.tar.gz | 46.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| logifyx-1.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 77.5 kB
Release files / logifyx-1.1.3.tar.gz
| Download URL | logifyx-1.1.3.tar.gz |
|---|---|
| Size | 46.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
64571310755be56ac414a47c43ff0c961272cd7ad719d90131cd34ba14b59cd0
|
|
BLAKE2b-256 checksum How to use checksums |
f3adcb44746ca579a8f71c089f413314a4a220ea54d73e1fed5cf5df6fa8090e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|
Release files / logifyx-1.1.3-py3-none-any.whl
| Download URL | logifyx-1.1.3-py3-none-any.whl |
|---|---|
| Size | 31.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
be561b81d3538e8a4dc617f221ea84060b373593e6069410b5244d72d29442dd
|
|
BLAKE2b-256 checksum How to use checksums |
5c85084eba76474d1bdc4c675a3ae4b2c9a6484cd8f923ec7e7722f175f346bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|