Seldaek

Seldaek / monolog

#16
21,3891,905PHP

Sends your logs to files, sockets, inboxes, databases and various web services

💡 Use Cases

Monolog最适合需要灵活、可扩展日志系统的PHP项目,尤其是需要多通道输出、分级过滤、第三方服务集成和自定义格式化的场景。

多通道日志记录

Problem: 开发时需要在控制台看到日志,生产环境却要写入文件并发送告警邮件,手动切换配置很麻烦。

Solution: Monolog支持同时配置多个Handler,比如StreamHandler写入文件、BrowserConsoleHandler输出到浏览器控制台、NativeMailerHandler发送邮件,只需在初始化Logger时添加多个Handler即可。

Example: 开发环境:Logger添加StreamHandler和BrowserConsoleHandler;生产环境:Logger添加StreamHandler和NativeMailerHandler,通过环境变量切换配置。

日志分级与过滤

Problem: 日志文件里充斥着大量DEBUG信息,导致难以定位ERROR级别的错误。

Solution: Monolog支持按日志级别过滤,可以为每个Handler设置最低日志级别,例如StreamHandler只记录WARNING及以上日志,而FileHandler记录所有级别。

Example: 使用StreamHandler('php://stderr', Logger::WARNING)只输出警告和错误到标准错误流,避免调试信息干扰。

第三方服务集成

Problem: 需要将应用错误实时推送到Slack、Sentry或日志聚合平台,但每个服务都有不同API,集成成本高。

Solution: Monolog内置了SlackHandler、SlackWebhookHandler、SentryHandler等数十种第三方Handler,只需简单配置即可将日志推送到对应服务。

Example: 使用SlackWebhookHandler('https://hooks.slack.com/services/xxx', 'channel', 'botname'),当ERROR发生时自动发送通知到Slack频道。

日志格式化与上下文

Problem: 默认日志格式缺乏关键信息(如用户ID、请求ID),排查问题时难以关联上下文。

Solution: Monolog支持自定义Formatter和Processor,可以添加额外上下文信息(如IP、Session ID),并控制日志输出格式(JSON、Line等)。

Example: 使用LineFormatter自定义格式,再添加IntrospectionProcessor自动注入调用文件和行号,使日志包含完整调用栈。

📊 Project Info

Language
PHP
Stars
21,389
Forks
1,905
Ranking
#16
Collection
Language
Trending Date
May 30, 2026
Last Push
5/30/2026

🏷️ Topics

hacktoberfestloggerloggingphppsr-3

📸 Screenshots

monolog screenshot 1