maatify / event-logging
Framework-agnostic standalone event logging library containing isolated Maatify logging domains. Depends only on explicit Composer/runtime dependencies.
Requires
- php: ^8.2
- ext-json: *
- ext-pdo: *
- maatify/exceptions: ^1.1
- maatify/shared-common: ^1.0
- psr/log: ^3.0
- ramsey/uuid: ^4.9
Requires (Dev)
- phpstan/phpstan: ^2.2
- phpunit/phpunit: ^10.0 || ^11.0
Suggests
- php-di/php-di: Optional DI container integration for wiring maatify/event-logging bindings.
README
maatify/event-logging is a framework-agnostic standalone Composer package for registering event logging domains within the Maatify ecosystem.
This package provides strict domain isolation, MySQL persistence, and fail-open/fail-closed semantics without mandatory framework bindings. It intentionally relies on explicit Composer and runtime dependencies to operate autonomously from host applications and frameworks.
๐ Key Features
- Six Isolated Logging Domains: Explicit boundaries for audit, tracing, signals, and operations.
- Domain-Specific Recorders: Tailored commands, DTOs, and repositories per domain.
- MySQL-Only Persistence: Direct database persistence through domain-owned repositories.
- AuthoritativeAudit Semantics: Fail-closed governance logging.
- Fail-Open Boundaries: Non-authoritative domains can accept a PSR-3 fallback logger.
- Optional Framework-Agnostic Provider and Bindings: Built-in optional factories and pure-PHP DI binding helpers for wiring dependencies.
- Primitive Cursor-Based Read APIs: Dedicated, stable read/query capabilities.
- No Mandatory Framework Bindings: Optional bindings are pure PHP convenience helpers and do not add framework runtime dependencies.
- No Generic Logging API: Excludes shared generic loggers, generic log tables, or unified repositories.
๐ Requirements
- PHP
^8.2 ext-jsonext-pdo
Composer/Runtime Dependencies:
psr/logramsey/uuidmaatify/exceptionsmaatify/shared-common
๐ฆ Installation
composer require maatify/event-logging
๐ Usage
Factory / Provider Wiring
Host applications provide their own dependencies (PDO, Clock, PSR-3 Logger) to instantiate the domain provider:
use Maatify\EventLogging\Provider\EventLoggingProviderFactory; use Maatify\EventLogging\Common\SystemClock; $pdo = new \PDO('mysql:host=localhost;dbname=mydb', 'user', 'pass'); $clock = new SystemClock(); $psrLogger = new \Monolog\Logger('event-logging-fallback'); // Optional for fail-open domains // Create the provider service map $provider = EventLoggingProviderFactory::createDefault($pdo, $clock, $psrLogger); // Typed accessors enforce strict domain API boundaries $auditTrail = $provider->auditTrail();
(See 01-factory-provider.php for manual factory/provider wiring. Hosts that prefer DI can also import the optional pure-PHP Maatify\EventLogging\Bootstrap\EventLoggingBindings::definitions() helper; this helper is not required and does not introduce framework-specific behavior.)
Domain Recorder Usage
Recording an authoritative audit (fail-closed, requires robust persistence):
$authoritativeAudit = $provider->authoritativeAudit(); // Using the primitive convenience record method $authoritativeAudit->record( action: 'update_permissions', targetType: 'user', targetId: 123, riskLevel: 'HIGH', actorType: 'admin', actorId: 1, payload: ['role' => 'superuser'], correlationId: 'abc-123' );
(See 03-authoritative-audit-record.php and 04-audit-trail-record.php for broader examples.)
๐๏ธ Logging Domains
The package maintains six separated event domains:
- AuthoritativeAudit โ Governance/security posture logging with fail-closed semantics.
- AuditTrail โ Reads, views, exports, and navigation visibility events.
- SecuritySignals โ Authentication and security anomaly signals.
- BehaviorTrace โ Operational activity and mutation-only behavior events.
- DiagnosticsTelemetry โ Technical observability and diagnostic events.
- DeliveryOperations โ Async jobs, notifications, webhooks, and delivery lifecycle events.
๐ก๏ธ Architecture Guarantees
- Framework-Agnostic: Operates without any dependency on external framework containers or routes.
- Standalone Execution: Complete isolation from host application codebases.
- Domain Isolation: Every logging domain has exclusive ownership over its DTOs, tables, and policies.
- Host-Provided PDO: Database connections must be injected; the package does not manage connection lifecycles.
- MySQL-Only: Relies purely on MySQL schema without SQLite fallback support.
- Explicit Dependencies Only: Avoids zero-dependency assumptions; explicit runtime requirements ensure robustness.
- No Generic Paradigms: The package does not expose a catch-all logger, generic recorder, generic repository, or shared generic log table. PSR-3 is used only as an optional fallback logger for fail-open domains.
๐งช Examples
The examples/ directory contains plain PHP illustrative skeletons covering integration scenarios. See the Examples Coverage Plan for full context.
01-factory-provider.php02-manual-wiring.php03-authoritative-audit-record.php09-admin-read-audit-trail.php11-cursor-pagination.php13-psr-fallback-logger.php
๐ Documentation
Integration Guides
โ Quality Status
- PHP 8.2+
- PHPStan Level Max
- PHPUnit testing available
- GitHub Actions CI validated
๐ชช License
This package is licensed under the MIT License. See the LICENSE file for details.
๐ค Author
Engineered by Mohamed Abdulalim (@megyptm)
Backend Lead & Technical Architect
https://www.maatify.dev
[Built with โค๏ธ by Maatify.dev โ Unified Ecosystem for Modern PHP Libraries]