rsyslog-logger


Namersyslog-logger JSON
Version 1.0.5 PyPI version JSON
download
home_pageNone
SummaryProduction-ready logging with rsyslog formatting and reliable rotation
upload_time2025-10-23 12:33:35
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords logging rsyslog rotation production syslog monitoring
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Rsyslog Logger

[![PyPI version](https://badge.fury.io/py/rsyslog-logger.svg)](https://badge.fury.io/py/rsyslog-logger)
[![Python Support](https://img.shields.io/pypi/pyversions/rsyslog-logger.svg)](https://pypi.org/project/rsyslog-logger/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

A production-ready Python logging library with professional rsyslog-style formatting, reliable log rotation, and cross-platform compatibility. Designed for system administrators and developers who need robust, operational logging.

## ๐Ÿš€ Features

- **๐Ÿ“ Rsyslog-style formatting**: Industry-standard syslog format (`Jan 1 12:34:56 hostname program[pid]: level: message`)
- **๐Ÿ”„ Reliable log rotation**: Copy-and-truncate method works even with open file handles (Windows-friendly)
- **โšก Zero dependencies**: No external requirements, uses only Python standard library
- **๐ŸŒ Cross-platform**: Works seamlessly on Windows, Linux, and macOS
- **๐Ÿ”ง Production-ready**: Robust error handling and file operation safety
- **๐Ÿ“Š Configurable**: Flexible sizing, backup counts, and formatting options
- **๐Ÿงช Fully tested**: Comprehensive test suite with 25+ tests

## ๐Ÿ“ฆ Installation

```bash
pip install rsyslog-logger
```

## ๐ŸŽฏ Quick Start

```python
from rsyslog_logger import setup_logger

# Simple setup with default rsyslog formatting
logger = setup_logger("myapp")
logger.info("Application started")
# Output: Sep 11 20:15:30 hostname myapp[1234]: info: Application started

# Custom log file and level
logger = setup_logger(
    name="myapp",
    log_file="/var/log/myapp.log",
    log_level="DEBUG"
)
logger.debug("Debug information")
logger.error("Something went wrong!")
```

## ๐Ÿ“– Usage Examples

### Basic Logging

```python
from rsyslog_logger import setup_logger

logger = setup_logger("webapp")

logger.info("User login successful")
logger.warning("High memory usage detected")
logger.error("Database connection failed")
logger.critical("System shutdown initiated")
```

### Custom Configuration

```python
from rsyslog_logger import setup_logger

# Production configuration with custom settings
logger = setup_logger(
    name="production-app",
    log_file="/var/log/production.log",
    log_level="INFO",
    log_format="rsyslog",           # or "simple"
    console_log_level="ERROR",      # Only errors to console
    max_size=20,                    # Rotate at 20MB
    backup_count=10                 # Keep 10 backup files
)

# The logger automatically handles:
# - Log rotation when files get too large (10MB default)
# - Keeps 5 backup files by default
# - Proper file handle management
# - Cross-platform path handling
```

### Using Different Formatters

```python
# Rsyslog format (default)
logger = setup_logger("app", log_format="rsyslog")
logger.info("Hello world")
# Sep 11 20:15:30 hostname app[1234]: info: Hello world

# Simple format
logger = setup_logger("app", log_format="simple")
logger.info("Hello world")
# 2025-09-11 20:15:30 - INFO - Hello world
```

### Advanced Usage with Manual Rotation

```python
from rsyslog_logger import setup_logger, rotate_log_file, cleanup_old_log_files

logger = setup_logger("advanced-app", "/var/log/app.log")

# Manual log rotation (automatic rotation happens by size)
rotate_log_file("/var/log/app.log", force=True)

# Custom cleanup (keep only 3 backup files)
cleanup_old_log_files("/var/log/app.log", backup_count=3)
```

### Exception Logging

```python
logger = setup_logger("error-handler")

try:
    result = 10 / 0
except ZeroDivisionError:
    logger.exception("Division error occurred")
    # Automatically includes full traceback
```

## โš™๏ธ Configuration Options

### setup_logger() Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `name` | str | `"Rsyslog-Logger"` | Logger name (appears in log messages) |
| `log_file` | str | `"Rsyslog-Logger.log"` | Log file path (`None` for console only) |
| `log_level` | str | `"INFO"` | Logging level (`DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`) |
| `log_format` | str | `"rsyslog"` | Format style (`"rsyslog"` or `"simple"`) |
| `console_log_level` | str | `"INFO"` | Separate log level for console output |
| `max_size` | int/float | `10` | Maximum log file size in MB before rotation |
| `backup_count` | int | `5` | Number of backup log files to keep |

### Log Rotation Settings

The logger automatically rotates files when they exceed **10MB** by default. You can customize this:

```python
from rsyslog_logger import SizeRotatingFileHandler

# Custom rotation size (5MB)
handler = SizeRotatingFileHandler(
    "/var/log/app.log",
    max_size=5  # 5MB
)
```

### Cleanup Settings

```python
from rsyslog_logger import cleanup_old_log_files

# Keep only 10 backup files
cleanup_old_log_files("/var/log/app.log", backup_count=10)

# Remove all backups
cleanup_old_log_files("/var/log/app.log", backup_count=0)
```

## ๐Ÿ—๏ธ Architecture

The library consists of several key components:

- **`setup_logger()`**: Main entry point for logger configuration
- **`SizeRotatingFileHandler`**: Custom file handler with size-based rotation
- **`RsyslogFormatter`**: Professional syslog-style message formatting
- **`rotate_log_file()`**: Manual log rotation using copy-and-truncate
- **`cleanup_old_log_files()`**: Backup file management with configurable retention

### Why Copy-and-Truncate?

Unlike traditional rotation methods that move files, this library uses **copy-and-truncate** rotation:

โœ… **Works with open file handles** (no application restart needed)
โœ… **Windows compatible** (no file locking issues)
โœ… **Safe for production** (no log loss during rotation)
โœ… **Process-agnostic** (works regardless of file handle state)

## ๐Ÿ“ก Remote Syslog Integration

### Configuring rsyslogd for Remote Logging

To forward logs to a remote syslog daemon using the `omfwd` module, add the following to your `/etc/rsyslog.conf` or create a new file in `/etc/rsyslog.d/`:

```bash
# Forward all logs to remote syslog server
*.* @@remote-syslog-server:514

# Forward only specific facility/priority
local0.* @@remote-syslog-server:514

# Forward with specific format (optional)
$ActionForwardDefaultTemplate RSYSLOG_TraditionalForwardFormat
*.* @@remote-syslog-server:514
```

**Protocol Options:**
- `@@` - TCP (reliable, recommended for production)
- `@` - UDP (faster, may lose messages)

### Example rsyslogd Configuration

```bash
# /etc/rsyslog.d/50-remote.conf

# Load omfwd module
$ModLoad omfwd

# Forward application logs to remote server
local0.* @@log-server.example.com:514

# Optional: Forward to multiple servers
local0.* @@primary-log-server:514
local0.* @@backup-log-server:514

# Restart rsyslogd after configuration changes
# systemctl restart rsyslog
```

### Monitoring Log Files with imfile Module

Ubuntu/Debian systems can monitor specific log files and forward them through syslog using the `imfile` module:

```bash
# /etc/rsyslog.d/60-myapp.conf

# Load imfile module
$ModLoad imfile

# Monitor application log file
$InputFileName /var/log/myapp.log
$InputFileTag myapp:
$InputFileStateFile stat-myapp
$InputFileSeverity info
$InputFileFacility local0
$InputRunFileMonitor

# Forward to remote server
local0.* @@remote-syslog-server:514
```

After adding the configuration:
```bash
sudo systemctl restart rsyslog
```

### Property-Based Filtering and Routing

rsyslog supports advanced filtering based on message properties like `$programname`. This is perfect for routing specific application logs:

```bash
# /etc/rsyslog.d/50-app-routing.conf

# Route messages by program name to specific files
if $programname == 'myapp' then /var/log/myapp.log
& stop

# Route by program name to remote server
if $programname == 'critical-app' then @@remote-syslog-server:514
if $programname == 'critical-app' then /var/log/critical-app.log
& stop

# Multiple conditions
if $programname == 'webapp' and $msg contains 'ERROR' then {
    @@error-server:514
    /var/log/webapp-errors.log
    stop
}

# Default catch-all (messages not handled above)
*.* /var/log/syslog
```

**Key Syntax:**
- `if $programname == 'name' then action` - Conditional routing
- `& stop` - Stop processing, prevent further rules
- `stop` - Modern syntax (same as `& stop`)
- `$msg contains 'text'` - Message content filtering
- `and`, `or` - Logical operators

## ๐Ÿงช Testing

Run the comprehensive test suite:

```bash
# Install test dependencies
pip install pytest pytest-cov

# Run tests
pytest

# Run with coverage
pytest --cov=rsyslog_logger --cov-report=html
```

The test suite includes:
- **Rotation testing**: Size limits, backup creation, sequential numbering
- **Format validation**: Rsyslog format compliance, timestamp accuracy
- **Cleanup testing**: Backup count limits, file sorting, error handling
- **Cross-platform testing**: Windows and Linux compatibility
- **Error resilience**: Permission errors, missing files, edge cases

## ๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

### Development Setup

```bash
# Clone the repository
git clone https://github.com/Oratorian/rsyslog-logger.git
cd rsyslog-logger

# Install development dependencies
pip install -e .
pip install pytest pytest-cov pytest-mock

# Run tests
pytest
```

### Code Quality

- Follow PEP 8 style guidelines
- Add tests for new functionality
- Update documentation for API changes
- Ensure cross-platform compatibility

## ๐Ÿ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## ๐Ÿ”— Links

- **PyPI Package**: https://pypi.org/project/rsyslog-logger/
- **Source Code**: https://github.com/Oratorian/rsyslog-logger
- **Issue Tracker**: https://github.com/Oratorian/rsyslog-logger/issues
- **Documentation**: https://github.com/Oratorian/rsyslog-logger/blob/main/README.md

## ๐ŸŽ‰ Why Choose Rsyslog Logger?

**For System Administrators:**
- Professional syslog format integrates with existing log management
- Reliable rotation prevents disk space issues
- Cross-platform compatibility for mixed environments
- Zero-dependency deployment simplifies installation

**For Developers:**
- Production-ready out of the box
- Comprehensive error handling
- Clean, documented API
- Extensive test coverage ensures reliability

**For DevOps Teams:**
- Operational logging best practices built-in
- Configurable retention policies
- Performance optimized for high-throughput scenarios
- Container and cloud-friendly

---

*Built with โค๏ธ by [Mahesvara](https://github.com/Oratorian) for the Python community*

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "rsyslog-logger",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "logging, rsyslog, rotation, production, syslog, monitoring",
    "author": null,
    "author_email": "Mahesvara <mahesvara@amhosting.de>",
    "download_url": "https://files.pythonhosted.org/packages/3d/98/0cdc8e0dca40f2182cef260ee10300ef5f4ab936d74a59dcd2fa216c8650/rsyslog_logger-1.0.5.tar.gz",
    "platform": null,
    "description": "# Rsyslog Logger\r\n\r\n[![PyPI version](https://badge.fury.io/py/rsyslog-logger.svg)](https://badge.fury.io/py/rsyslog-logger)\r\n[![Python Support](https://img.shields.io/pypi/pyversions/rsyslog-logger.svg)](https://pypi.org/project/rsyslog-logger/)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\nA production-ready Python logging library with professional rsyslog-style formatting, reliable log rotation, and cross-platform compatibility. Designed for system administrators and developers who need robust, operational logging.\r\n\r\n## \ud83d\ude80 Features\r\n\r\n- **\ud83d\udcdd Rsyslog-style formatting**: Industry-standard syslog format (`Jan 1 12:34:56 hostname program[pid]: level: message`)\r\n- **\ud83d\udd04 Reliable log rotation**: Copy-and-truncate method works even with open file handles (Windows-friendly)\r\n- **\u26a1 Zero dependencies**: No external requirements, uses only Python standard library\r\n- **\ud83c\udf0d Cross-platform**: Works seamlessly on Windows, Linux, and macOS\r\n- **\ud83d\udd27 Production-ready**: Robust error handling and file operation safety\r\n- **\ud83d\udcca Configurable**: Flexible sizing, backup counts, and formatting options\r\n- **\ud83e\uddea Fully tested**: Comprehensive test suite with 25+ tests\r\n\r\n## \ud83d\udce6 Installation\r\n\r\n```bash\r\npip install rsyslog-logger\r\n```\r\n\r\n## \ud83c\udfaf Quick Start\r\n\r\n```python\r\nfrom rsyslog_logger import setup_logger\r\n\r\n# Simple setup with default rsyslog formatting\r\nlogger = setup_logger(\"myapp\")\r\nlogger.info(\"Application started\")\r\n# Output: Sep 11 20:15:30 hostname myapp[1234]: info: Application started\r\n\r\n# Custom log file and level\r\nlogger = setup_logger(\r\n    name=\"myapp\",\r\n    log_file=\"/var/log/myapp.log\",\r\n    log_level=\"DEBUG\"\r\n)\r\nlogger.debug(\"Debug information\")\r\nlogger.error(\"Something went wrong!\")\r\n```\r\n\r\n## \ud83d\udcd6 Usage Examples\r\n\r\n### Basic Logging\r\n\r\n```python\r\nfrom rsyslog_logger import setup_logger\r\n\r\nlogger = setup_logger(\"webapp\")\r\n\r\nlogger.info(\"User login successful\")\r\nlogger.warning(\"High memory usage detected\")\r\nlogger.error(\"Database connection failed\")\r\nlogger.critical(\"System shutdown initiated\")\r\n```\r\n\r\n### Custom Configuration\r\n\r\n```python\r\nfrom rsyslog_logger import setup_logger\r\n\r\n# Production configuration with custom settings\r\nlogger = setup_logger(\r\n    name=\"production-app\",\r\n    log_file=\"/var/log/production.log\",\r\n    log_level=\"INFO\",\r\n    log_format=\"rsyslog\",           # or \"simple\"\r\n    console_log_level=\"ERROR\",      # Only errors to console\r\n    max_size=20,                    # Rotate at 20MB\r\n    backup_count=10                 # Keep 10 backup files\r\n)\r\n\r\n# The logger automatically handles:\r\n# - Log rotation when files get too large (10MB default)\r\n# - Keeps 5 backup files by default\r\n# - Proper file handle management\r\n# - Cross-platform path handling\r\n```\r\n\r\n### Using Different Formatters\r\n\r\n```python\r\n# Rsyslog format (default)\r\nlogger = setup_logger(\"app\", log_format=\"rsyslog\")\r\nlogger.info(\"Hello world\")\r\n# Sep 11 20:15:30 hostname app[1234]: info: Hello world\r\n\r\n# Simple format\r\nlogger = setup_logger(\"app\", log_format=\"simple\")\r\nlogger.info(\"Hello world\")\r\n# 2025-09-11 20:15:30 - INFO - Hello world\r\n```\r\n\r\n### Advanced Usage with Manual Rotation\r\n\r\n```python\r\nfrom rsyslog_logger import setup_logger, rotate_log_file, cleanup_old_log_files\r\n\r\nlogger = setup_logger(\"advanced-app\", \"/var/log/app.log\")\r\n\r\n# Manual log rotation (automatic rotation happens by size)\r\nrotate_log_file(\"/var/log/app.log\", force=True)\r\n\r\n# Custom cleanup (keep only 3 backup files)\r\ncleanup_old_log_files(\"/var/log/app.log\", backup_count=3)\r\n```\r\n\r\n### Exception Logging\r\n\r\n```python\r\nlogger = setup_logger(\"error-handler\")\r\n\r\ntry:\r\n    result = 10 / 0\r\nexcept ZeroDivisionError:\r\n    logger.exception(\"Division error occurred\")\r\n    # Automatically includes full traceback\r\n```\r\n\r\n## \u2699\ufe0f Configuration Options\r\n\r\n### setup_logger() Parameters\r\n\r\n| Parameter | Type | Default | Description |\r\n|-----------|------|---------|-------------|\r\n| `name` | str | `\"Rsyslog-Logger\"` | Logger name (appears in log messages) |\r\n| `log_file` | str | `\"Rsyslog-Logger.log\"` | Log file path (`None` for console only) |\r\n| `log_level` | str | `\"INFO\"` | Logging level (`DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`) |\r\n| `log_format` | str | `\"rsyslog\"` | Format style (`\"rsyslog\"` or `\"simple\"`) |\r\n| `console_log_level` | str | `\"INFO\"` | Separate log level for console output |\r\n| `max_size` | int/float | `10` | Maximum log file size in MB before rotation |\r\n| `backup_count` | int | `5` | Number of backup log files to keep |\r\n\r\n### Log Rotation Settings\r\n\r\nThe logger automatically rotates files when they exceed **10MB** by default. You can customize this:\r\n\r\n```python\r\nfrom rsyslog_logger import SizeRotatingFileHandler\r\n\r\n# Custom rotation size (5MB)\r\nhandler = SizeRotatingFileHandler(\r\n    \"/var/log/app.log\",\r\n    max_size=5  # 5MB\r\n)\r\n```\r\n\r\n### Cleanup Settings\r\n\r\n```python\r\nfrom rsyslog_logger import cleanup_old_log_files\r\n\r\n# Keep only 10 backup files\r\ncleanup_old_log_files(\"/var/log/app.log\", backup_count=10)\r\n\r\n# Remove all backups\r\ncleanup_old_log_files(\"/var/log/app.log\", backup_count=0)\r\n```\r\n\r\n## \ud83c\udfd7\ufe0f Architecture\r\n\r\nThe library consists of several key components:\r\n\r\n- **`setup_logger()`**: Main entry point for logger configuration\r\n- **`SizeRotatingFileHandler`**: Custom file handler with size-based rotation\r\n- **`RsyslogFormatter`**: Professional syslog-style message formatting\r\n- **`rotate_log_file()`**: Manual log rotation using copy-and-truncate\r\n- **`cleanup_old_log_files()`**: Backup file management with configurable retention\r\n\r\n### Why Copy-and-Truncate?\r\n\r\nUnlike traditional rotation methods that move files, this library uses **copy-and-truncate** rotation:\r\n\r\n\u2705 **Works with open file handles** (no application restart needed)\r\n\u2705 **Windows compatible** (no file locking issues)\r\n\u2705 **Safe for production** (no log loss during rotation)\r\n\u2705 **Process-agnostic** (works regardless of file handle state)\r\n\r\n## \ud83d\udce1 Remote Syslog Integration\r\n\r\n### Configuring rsyslogd for Remote Logging\r\n\r\nTo forward logs to a remote syslog daemon using the `omfwd` module, add the following to your `/etc/rsyslog.conf` or create a new file in `/etc/rsyslog.d/`:\r\n\r\n```bash\r\n# Forward all logs to remote syslog server\r\n*.* @@remote-syslog-server:514\r\n\r\n# Forward only specific facility/priority\r\nlocal0.* @@remote-syslog-server:514\r\n\r\n# Forward with specific format (optional)\r\n$ActionForwardDefaultTemplate RSYSLOG_TraditionalForwardFormat\r\n*.* @@remote-syslog-server:514\r\n```\r\n\r\n**Protocol Options:**\r\n- `@@` - TCP (reliable, recommended for production)\r\n- `@` - UDP (faster, may lose messages)\r\n\r\n### Example rsyslogd Configuration\r\n\r\n```bash\r\n# /etc/rsyslog.d/50-remote.conf\r\n\r\n# Load omfwd module\r\n$ModLoad omfwd\r\n\r\n# Forward application logs to remote server\r\nlocal0.* @@log-server.example.com:514\r\n\r\n# Optional: Forward to multiple servers\r\nlocal0.* @@primary-log-server:514\r\nlocal0.* @@backup-log-server:514\r\n\r\n# Restart rsyslogd after configuration changes\r\n# systemctl restart rsyslog\r\n```\r\n\r\n### Monitoring Log Files with imfile Module\r\n\r\nUbuntu/Debian systems can monitor specific log files and forward them through syslog using the `imfile` module:\r\n\r\n```bash\r\n# /etc/rsyslog.d/60-myapp.conf\r\n\r\n# Load imfile module\r\n$ModLoad imfile\r\n\r\n# Monitor application log file\r\n$InputFileName /var/log/myapp.log\r\n$InputFileTag myapp:\r\n$InputFileStateFile stat-myapp\r\n$InputFileSeverity info\r\n$InputFileFacility local0\r\n$InputRunFileMonitor\r\n\r\n# Forward to remote server\r\nlocal0.* @@remote-syslog-server:514\r\n```\r\n\r\nAfter adding the configuration:\r\n```bash\r\nsudo systemctl restart rsyslog\r\n```\r\n\r\n### Property-Based Filtering and Routing\r\n\r\nrsyslog supports advanced filtering based on message properties like `$programname`. This is perfect for routing specific application logs:\r\n\r\n```bash\r\n# /etc/rsyslog.d/50-app-routing.conf\r\n\r\n# Route messages by program name to specific files\r\nif $programname == 'myapp' then /var/log/myapp.log\r\n& stop\r\n\r\n# Route by program name to remote server\r\nif $programname == 'critical-app' then @@remote-syslog-server:514\r\nif $programname == 'critical-app' then /var/log/critical-app.log\r\n& stop\r\n\r\n# Multiple conditions\r\nif $programname == 'webapp' and $msg contains 'ERROR' then {\r\n    @@error-server:514\r\n    /var/log/webapp-errors.log\r\n    stop\r\n}\r\n\r\n# Default catch-all (messages not handled above)\r\n*.* /var/log/syslog\r\n```\r\n\r\n**Key Syntax:**\r\n- `if $programname == 'name' then action` - Conditional routing\r\n- `& stop` - Stop processing, prevent further rules\r\n- `stop` - Modern syntax (same as `& stop`)\r\n- `$msg contains 'text'` - Message content filtering\r\n- `and`, `or` - Logical operators\r\n\r\n## \ud83e\uddea Testing\r\n\r\nRun the comprehensive test suite:\r\n\r\n```bash\r\n# Install test dependencies\r\npip install pytest pytest-cov\r\n\r\n# Run tests\r\npytest\r\n\r\n# Run with coverage\r\npytest --cov=rsyslog_logger --cov-report=html\r\n```\r\n\r\nThe test suite includes:\r\n- **Rotation testing**: Size limits, backup creation, sequential numbering\r\n- **Format validation**: Rsyslog format compliance, timestamp accuracy\r\n- **Cleanup testing**: Backup count limits, file sorting, error handling\r\n- **Cross-platform testing**: Windows and Linux compatibility\r\n- **Error resilience**: Permission errors, missing files, edge cases\r\n\r\n## \ud83e\udd1d Contributing\r\n\r\nContributions are welcome! Please feel free to submit a Pull Request.\r\n\r\n### Development Setup\r\n\r\n```bash\r\n# Clone the repository\r\ngit clone https://github.com/Oratorian/rsyslog-logger.git\r\ncd rsyslog-logger\r\n\r\n# Install development dependencies\r\npip install -e .\r\npip install pytest pytest-cov pytest-mock\r\n\r\n# Run tests\r\npytest\r\n```\r\n\r\n### Code Quality\r\n\r\n- Follow PEP 8 style guidelines\r\n- Add tests for new functionality\r\n- Update documentation for API changes\r\n- Ensure cross-platform compatibility\r\n\r\n## \ud83d\udcc4 License\r\n\r\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\r\n\r\n## \ud83d\udd17 Links\r\n\r\n- **PyPI Package**: https://pypi.org/project/rsyslog-logger/\r\n- **Source Code**: https://github.com/Oratorian/rsyslog-logger\r\n- **Issue Tracker**: https://github.com/Oratorian/rsyslog-logger/issues\r\n- **Documentation**: https://github.com/Oratorian/rsyslog-logger/blob/main/README.md\r\n\r\n## \ud83c\udf89 Why Choose Rsyslog Logger?\r\n\r\n**For System Administrators:**\r\n- Professional syslog format integrates with existing log management\r\n- Reliable rotation prevents disk space issues\r\n- Cross-platform compatibility for mixed environments\r\n- Zero-dependency deployment simplifies installation\r\n\r\n**For Developers:**\r\n- Production-ready out of the box\r\n- Comprehensive error handling\r\n- Clean, documented API\r\n- Extensive test coverage ensures reliability\r\n\r\n**For DevOps Teams:**\r\n- Operational logging best practices built-in\r\n- Configurable retention policies\r\n- Performance optimized for high-throughput scenarios\r\n- Container and cloud-friendly\r\n\r\n---\r\n\r\n*Built with \u2764\ufe0f by [Mahesvara](https://github.com/Oratorian) for the Python community*\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Production-ready logging with rsyslog formatting and reliable rotation",
    "version": "1.0.5",
    "project_urls": {
        "Homepage": "https://github.com/Oratorian/rsyslog-logger",
        "Issues": "https://github.com/Oratorian/rsyslog-logger/issues",
        "Repository": "https://github.com/Oratorian/rsyslog-logger.git"
    },
    "split_keywords": [
        "logging",
        " rsyslog",
        " rotation",
        " production",
        " syslog",
        " monitoring"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3f9594f15c13e0ab5eb7ac5380c14f53a50ebe9586c9a051f0f9d2bf1fe334fc",
                "md5": "57281846e9b01eb7c2a4368d61b2b931",
                "sha256": "c4522cbc865148b14643be6435253bda8fd3878845224c2631c2f233407981ff"
            },
            "downloads": -1,
            "filename": "rsyslog_logger-1.0.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "57281846e9b01eb7c2a4368d61b2b931",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 9878,
            "upload_time": "2025-10-23T12:33:34",
            "upload_time_iso_8601": "2025-10-23T12:33:34.257441Z",
            "url": "https://files.pythonhosted.org/packages/3f/95/94f15c13e0ab5eb7ac5380c14f53a50ebe9586c9a051f0f9d2bf1fe334fc/rsyslog_logger-1.0.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3d980cdc8e0dca40f2182cef260ee10300ef5f4ab936d74a59dcd2fa216c8650",
                "md5": "cbc6880e93673b9ae094cfe08bda2f15",
                "sha256": "f80e3454d0be01c2395051cf86fa11da2db7d27caffb6ede7f3b60a6501acba3"
            },
            "downloads": -1,
            "filename": "rsyslog_logger-1.0.5.tar.gz",
            "has_sig": false,
            "md5_digest": "cbc6880e93673b9ae094cfe08bda2f15",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 18026,
            "upload_time": "2025-10-23T12:33:35",
            "upload_time_iso_8601": "2025-10-23T12:33:35.130002Z",
            "url": "https://files.pythonhosted.org/packages/3d/98/0cdc8e0dca40f2182cef260ee10300ef5f4ab936d74a59dcd2fa216c8650/rsyslog_logger-1.0.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-23 12:33:35",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Oratorian",
    "github_project": "rsyslog-logger",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "rsyslog-logger"
}
        
Elapsed time: 1.93534s