Skip to content

Repository files navigation

Maatify Event Logging

Maatify.dev

Latest Version PHP Version License PHPStan

Monthly Downloads Total Downloads Maatify Ecosystem Install

Changelog Package Reference Security Policy Contributing Guide

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-json
  • ext-pdo

Composer/Runtime Dependencies:

  • psr/log
  • ramsey/uuid
  • maatify/exceptions
  • maatify/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:

  1. AuthoritativeAudit β€” Governance/security posture logging with fail-closed semantics.
  2. AuditTrail β€” Reads, views, exports, and navigation visibility events.
  3. SecuritySignals β€” Authentication and security anomaly signals.
  4. BehaviorTrace β€” Operational activity and mutation-only behavior events.
  5. DiagnosticsTelemetry β€” Technical observability and diagnostic events.
  6. 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.


πŸ“š Documentation

Architecture

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


About

Framework-agnostic standalone event logging library with isolated Maatify logging domains, MySQL/PDO persistence, typed recorders, read APIs, and optional DI bindings.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages