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
