承接 monkeyscloud/monkeyslegion-logger 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

monkeyscloud/monkeyslegion-logger

Composer 安装命令:

composer require monkeyscloud/monkeyslegion-logger

包简介

High-performance, zero-dependency PSR-3 logger for MonkeysLegion with structured logging, handlers, processors, and PHP 8.4 features.

README 文档

README

High-performance, zero-dependency PSR-3 logger for the MonkeysLegion PHP framework. Built natively in PHP 8.4 with no Monolog dependency.

Features

Feature Status
PSR-3 Compliant ✅ Full Psr\Log\LoggerInterface
Zero External Dependencies ✅ Only psr/log interface
11 Handlers Stream, Rotating, Syslog, ErrorLog, Console, Null, Buffer, FingersCrossed, Deduplication, Group, Sampling
2 Formatters Line (template), JSON (structured)
6 Processors UID, Memory, Introspection, Timestamp, Redact, Environment
PHP 8.4 Features Property hooks, asymmetric visibility, backed enum, match expressions
Context Stacking pushContext() / popContext() for scoped context
Log Metrics Real-time per-level counters with $errorRate
Sensitive Data Redaction Automatic GDPR/PCI-safe redaction
Probabilistic Sampling Sample a % of debug logs in production
FingersCrossed (Black Box) Buffer until error, then flush full context
Deduplication Suppress repeated log entries

Installation

composer require monkeyscloud/monkeyslegion-logger

Quick Start

use MonkeysLegion\Logger\Logger;
use MonkeysLegion\Logger\Handler\StreamHandler;
use MonkeysLegion\Logger\LogLevel;

// Create a logger with a file handler
$logger = new Logger(
    handlers: [new StreamHandler('logs/app.log', LogLevel::Debug)],
    channelName: 'app',
);

$logger->info('User {name} logged in', ['name' => 'Jorge']);
$logger->error('Payment failed', ['order_id' => 42]);

$logger->close();

Using the LogManager

use MonkeysLegion\Logger\LogManager;

$manager = new LogManager([
    'default' => 'stack',
    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['daily', 'console'],
        ],
        'daily' => [
            'driver' => 'daily',
            'path' => 'logs/app.log',
            'level' => 'debug',
            'max_files' => 14,
        ],
        'console' => [
            'driver' => 'console',
            'level' => 'warning',
            'colorize' => true,
        ],
    ],
]);

$logger = $manager->channel(); // default = stack
$logger->info('Application started');

// Switch channels
$apiLogger = $manager->channel('daily');
$apiLogger->error('API timeout');

Handlers

StreamHandler

Writes to files or PHP streams with LOCK_EX for concurrency safety.

$handler = new StreamHandler('logs/app.log', LogLevel::Warning);

RotatingFileHandler

Daily log rotation with automatic cleanup of old files.

$handler = new RotatingFileHandler('logs/app.log', maxFiles: 14);

ConsoleHandler

ANSI-colored output to stderr/stdout.

$handler = new ConsoleHandler(LogLevel::Debug, colorize: true);

BufferHandler

Defers I/O by buffering records in memory. Flushes on close or overflow.

$handler = new BufferHandler($innerHandler, bufferLimit: 100);

FingersCrossedHandler

Black box recorder. Buffers everything silently. When an error arrives, flushes the entire buffer — giving full debug context for production errors.

$handler = new FingersCrossedHandler($innerHandler, LogLevel::Error);

DeduplicationHandler

Suppresses repeated identical log entries within a time window.

$handler = new DeduplicationHandler($innerHandler, deduplicationWindow: 60);

SamplingHandler

Novel. Probabilistic sampling — logs only a percentage of non-error records.

$handler = new SamplingHandler($innerHandler, sampleRate: 0.01); // 1%
// Errors always pass through regardless of sample rate

GroupHandler

Dispatches to multiple handlers simultaneously.

$handler = new GroupHandler([$fileHandler, $consoleHandler]);

Processors

RedactProcessor (Novel)

Automatically redacts sensitive fields from context data.

use MonkeysLegion\Logger\Processor\RedactProcessor;

$processor = new RedactProcessor();
// Automatically redacts: password, token, api_key, secret, credit_card, ssn, etc.

$logger = new Logger(
    handlers: [$handler],
    processors: [$processor],
);

$logger->info('Login', ['user' => 'jorge', 'password' => 'secret']);
// Output: {"context":{"user":"jorge","password":"********"}}

Other Processors

use MonkeysLegion\Logger\Processor\UidProcessor;          // Request correlation ID
use MonkeysLegion\Logger\Processor\MemoryProcessor;       // Memory usage & peak
use MonkeysLegion\Logger\Processor\IntrospectionProcessor; // Call site (file, line)
use MonkeysLegion\Logger\Processor\TimestampProcessor;    // Microsecond timestamps
use MonkeysLegion\Logger\Processor\EnvironmentProcessor;  // Hostname, PHP version, SAPI

Context Stacking

$logger->pushContext(['request_id' => 'abc-123']);

$logger->info('Processing started');  // Includes request_id
$logger->info('Step 2 complete');     // Includes request_id

$logger->popContext();

$logger->info('Done'); // No request_id

Log Metrics

$metrics = $logger->getMetrics();

echo $metrics->totalCount;   // Total log entries
echo $metrics->errorRate;    // Ratio of errors to total (0.0–1.0)
echo $metrics->countFor(LogLevel::Error); // Count per level

LogLevel Enum

use MonkeysLegion\Logger\LogLevel;

$level = LogLevel::Error;
$level->priority();       // 4
$level->isError();        // true
$level->label();          // 'ERROR'
$level->syslogSeverity(); // LOG_ERR

LogLevel::fromPsr3('fatal'); // LogLevel::Critical

Changelog

2.0.0 — Complete Rebuild

BREAKING CHANGE: Full API redesign. All v1 classes removed.

  • Architecture: Replaced Monolog-dependent design with native, zero-dependency Handler/Formatter/Processor architecture
  • Core Types: LogLevel backed enum, immutable LogRecord VO, LogMetrics VO
  • 13 Handlers: Stream, RotatingFile, Syslog, ErrorLog, Console, Null, Buffer, FingersCrossed, Deduplication, Group, Sampling
  • 2 Formatters: LineFormatter (template-based), JsonFormatter (structured JSON Lines)
  • 7 Processors: UID, Memory, Introspection, Timestamp, Redact, Environment
  • Novel Features: Probabilistic sampling, sensitive data redaction, context stacking, real-time log metrics
  • PHP 8.4: Property hooks, asymmetric visibility, backed enums, match expressions
  • DI-First: LogManager with config-driven channel resolution and custom driver extension
  • Tests: 96 tests, 171 assertions

Requirements

  • PHP 8.4+
  • psr/log ^3.0

License

MIT

monkeyscloud/monkeyslegion-logger 适用场景与选型建议

monkeyscloud/monkeyslegion-logger 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.02k 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 11 月 20 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「logging」 「logger」 「psr-3」 「monkeyslegion」 「structured-logging」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 monkeyscloud/monkeyslegion-logger 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 monkeyscloud/monkeyslegion-logger 我们能提供哪些服务?
定制开发 / 二次开发

基于 monkeyscloud/monkeyslegion-logger 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 2.02k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 8
  • 依赖项目数: 5
  • 推荐数: 1

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-11-20