Seldaek

Seldaek / monolog

#16
21,3891,905PHP

将日志发送到文件、套接字、收件箱、数据库及各类网络服务

💡 应用场景

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

多通道日志记录

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

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

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

日志分级与过滤

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

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

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

第三方服务集成

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

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

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

日志格式化与上下文

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

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

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

📊 项目信息

语言
PHP
Stars
21,389
Forks
1,905
排名
#16
收录
语言榜
趋势日期
2026年5月30日
最后推送
2026/5/30

🏷️ 标签

hacktoberfestloggerloggingphppsr-3

📸 截图

monolog screenshot 1