Skip to content

Logger System Core Concepts

The AuroraCore Logger is a high-performance, multi-threaded logging system designed for Android root environments. This guide explains the core concepts and architecture behind the logger component.

Architecture Overview

The Logger system consists of several key components working together:

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   Client API    │───▶│   Buffer Manager │───▶│   File Manager  │
└─────────────────┘    └──────────────────┘    └─────────────────┘
         │                       │                       │
         │                       ▼                       ▼
         │              ┌──────────────────┐    ┌─────────────────┐
         └─────────────▶│   IPC Client     │    │   Log Rotation  │
                        └──────────────────┘    └─────────────────┘
                                 │                       │
                                 ▼                       ▼
                        ┌──────────────────┐    ┌─────────────────┐
                        │  Logger Daemon   │    │   File Storage  │
                        └──────────────────┘    └─────────────────┘

Core Components

1. Logger API

The main interface for applications to interact with the logging system.

Key Features:

  • Thread-safe logging operations
  • Multiple log levels (TRACE, DEBUG, INFO, WARNING, ERROR, FATAL)
  • Customizable log formatting
  • Asynchronous and synchronous modes

Configuration Options:

cpp
struct Config {
    std::string log_path;           // Log file path
    size_t max_file_size;          // Maximum file size before rotation
    int max_files;                 // Number of rotated files to keep
    size_t buffer_size;            // Internal buffer size
    int flush_interval_ms;         // Auto-flush interval
    bool auto_flush;               // Enable automatic flushing
    LogLevel min_log_level;        // Minimum log level to record
    std::string log_format;        // Custom log format string
};

2. Buffer Manager

Manages in-memory log buffers for optimal performance.

Features:

  • Ring Buffer Architecture: Efficient memory usage with circular buffer design
  • Batch Processing: Groups multiple log entries for efficient I/O operations
  • Memory Mapping: Uses memory-mapped files for high-performance writes
  • Overflow Protection: Handles buffer overflow scenarios gracefully

Performance Benefits:

  • Reduces system call overhead
  • Minimizes memory allocations
  • Enables burst logging scenarios
  • Provides consistent latency

3. File Manager

Handles file operations and log rotation policies.

Rotation Strategies:

  • Size-based Rotation: Rotates when file reaches maximum size
  • Time-based Rotation: Rotates at specified time intervals
  • Hybrid Rotation: Combines both size and time criteria

File Naming Convention:

app.log           # Current active log
app.log.1         # Most recent rotated log
app.log.2         # Second most recent
...
app.log.N         # Oldest rotated log

4. IPC Client

Enables communication with the logger daemon for system-wide logging.

Communication Methods:

  • Unix Domain Sockets: Low-latency inter-process communication
  • Shared Memory: High-throughput data transfer
  • Message Queues: Reliable message delivery

5. Logger Daemon

A background service that provides centralized logging for multiple processes.

Daemon Benefits:

  • Resource Sharing: Multiple processes share a single logger instance
  • System-wide Logging: Centralized log management
  • Privilege Separation: Runs with appropriate permissions
  • Crash Recovery: Continues logging even if client processes crash

Log Levels and Filtering

Log Level Hierarchy

TRACE    (0) - Detailed execution traces
DEBUG    (1) - Debug information
INFO     (2) - General information
WARNING  (3) - Warning messages
ERROR    (4) - Error conditions
FATAL    (5) - Fatal errors

Filtering Mechanism

The logger supports multiple filtering levels:

  1. Compile-time Filtering: Remove log statements during compilation
  2. Runtime Filtering: Filter based on configured minimum log level
  3. Dynamic Filtering: Change log levels without restarting

Performance Characteristics

Throughput Metrics

ModeThroughputLatencyMemory Usage
Synchronous~50K logs/sec<1msLow
Asynchronous~500K logs/sec<100μsMedium
Daemon Mode~1M logs/sec<50μsShared

Memory Management

Buffer Allocation:

  • Pre-allocated buffers to avoid runtime allocation
  • Memory pools for log entry objects
  • Configurable buffer sizes based on application needs

Memory Efficiency:

  • Zero-copy operations where possible
  • Efficient string handling
  • Minimal heap fragmentation

Thread Safety

The logger is designed to be fully thread-safe:

  • Lock-free Operations: Uses atomic operations for high-performance scenarios
  • Reader-Writer Locks: Optimizes for read-heavy workloads
  • Thread-local Storage: Reduces contention between threads

Error Handling

Graceful Degradation

  • Disk Full: Continues operation with in-memory buffering
  • Permission Errors: Falls back to alternative log locations
  • Network Issues: Queues logs for later transmission

Recovery Mechanisms

  • Automatic Retry: Retries failed operations with exponential backoff
  • Fallback Paths: Multiple output destinations for reliability
  • Health Monitoring: Built-in health checks and diagnostics

Integration Patterns

Singleton Pattern

cpp
// Global logger instance
auto& logger = LoggerAPI::InternalLogger::getInstance();
logger.log(LogLevel::INFO, "Application started");

Factory Pattern

cpp
// Create configured logger instance
auto config = LoggerAPI::InternalLogger::Config{};
config.log_path = "/data/local/tmp/app.log";
auto logger = LoggerAPI::createLogger(config);

RAII Pattern

cpp
// Automatic resource management
{
    LoggerAPI::InternalLogger logger(config);
    logger.log(LogLevel::INFO, "Processing data");
    // Logger automatically flushes and cleans up
}

Best Practices

Performance Optimization

  1. Use Appropriate Log Levels: Avoid verbose logging in production
  2. Batch Log Operations: Group related log entries
  3. Configure Buffer Sizes: Match buffer size to application patterns
  4. Enable Asynchronous Mode: For high-throughput scenarios

Resource Management

  1. Monitor Disk Usage: Implement log rotation policies
  2. Limit Log Retention: Configure appropriate retention periods
  3. Use Compression: Enable compression for archived logs
  4. Monitor Memory Usage: Tune buffer sizes based on available memory

Security Considerations

  1. Sanitize Log Data: Avoid logging sensitive information
  2. Secure Log Files: Set appropriate file permissions
  3. Encrypt Sensitive Logs: Use encryption for confidential data
  4. Audit Log Access: Monitor who accesses log files

This architecture provides a robust foundation for logging in Android root environments, balancing performance, reliability, and resource efficiency.

Released under the MIT License.