zigron/monolog

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

1.13.1 2015-03-09 09:58 UTC

README

Total Downloads Latest Stable Version Reference Status

Monolog 将您的日志发送到文件、套接字、收件箱、数据库和多种网络服务。以下列出了完整的手柄列表。特殊手柄允许您构建高级日志策略。

此库实现了 PSR-3 接口,您可以在自己的库中进行类型提示,以保持最大的互操作性。您也可以在应用程序中使用它,以确保您可以在以后的时间使用另一个兼容的记录器。从 1.11.0 版本开始,Monolog 公共 API 也将接受 PSR-3 日志级别。由于 Monolog 早于 PSR-3,因此内部 Monolog 仍然使用自己的级别方案。

安装

使用以下命令安装最新版本

$ composer require monolog/monolog

用法

<?php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');

核心概念

每个 Logger 实例都有一个通道(名称)和一组处理程序。每当您向记录器添加记录时,它都会遍历处理程序堆栈。每个处理程序都会决定是否完全处理了记录,如果是,则记录的传播在此结束。

这允许灵活的日志设置,例如,在堆栈底部有一个 StreamHandler,它将所有内容记录到磁盘,并在其上方添加一个 MailHandler,它只有在记录错误消息时才发送电子邮件。处理程序还有一个 $bubble 属性,它定义了它们在处理记录时是否阻止记录。在这个例子中,将 MailHandler$bubble 参数设置为 false 表示由 MailHandler 处理的记录将不再传播到 StreamHandler

您可以创建许多 Logger,每个定义一个通道(例如:db、request、router 等),每个都组合了各种处理程序,这些处理程序可以是共享的或不是共享的。通道反映在日志中,使您能够轻松地查看或过滤记录。

每个处理程序还有一个格式化程序,如果没有设置,将创建一个具有合理设置的默认格式化程序。格式化程序将标准化和格式化传入的记录,以便处理程序可以使用它们输出有用的信息。

没有可用的自定义严重级别。只有八个 RFC 5424 级别(调试、信息、注意、警告、错误、关键、警报、紧急)用于基本过滤目的,但为了排序和其他需要灵活性的用例,您应该在记录处理之前向记录器添加处理器,这些处理器可以向记录添加额外信息(标签、用户 IP 等)。

日志级别

Monolog 支持由 RFC 5424 描述的日志级别。

  • DEBUG (100):详细的调试信息。

  • INFO (200):有趣的事件。例如:用户登录、SQL 日志。

  • NOTICE (250):正常但重要的事件。

  • WARNING (300):异常情况,但不是错误。例如:使用过时的 API、API 使用不当、不一定是错误的不太理想的事情。

  • ERROR (400):运行时错误,不需要立即采取行动,但通常应该记录和监控。

  • CRITICAL (500):关键条件。例如:应用程序组件不可用、意外异常。

  • 警报 (550):必须立即采取行动。例如:整个网站崩溃,数据库不可用等。这应该触发短信警报并唤醒您。

  • 紧急 (600):紧急:系统无法使用。

文档

请参阅 doc 目录以获取更详细的文档。以下只是 Monolog 所包含的所有部分的列表。

处理器

记录到文件和系统日志

  • StreamHandler:将记录记录到任何 PHP 流中,用于日志文件。
  • RotatingFileHandler:将记录记录到文件,并每天创建一个日志文件。它还会删除比 $maxFiles 更旧的文件。尽管如此,您应该使用 logrotate 进行高配置设置,这只是一个快速简便的解决方案。
  • SyslogHandler:将记录记录到系统日志。
  • ErrorLogHandler:将记录记录到 PHP 的 error_log() 函数。

发送警报和电子邮件

  • NativeMailerHandler:使用 PHP 的 mail() 函数发送电子邮件。
  • SwiftMailerHandler:使用一个 Swift_Mailer 实例发送电子邮件。
  • PushoverHandler:通过 Pushover API 发送移动通知。
  • HipChatHandler:使用其 API 将记录记录到 HipChat 聊天室。
  • FlowdockHandler:将记录记录到 Flowdock 账户。
  • SlackHandler:将记录记录到 Slack 账户。
  • MandrillHandler:使用一个 Swift_Message 实例通过 Mandrill API 发送电子邮件。
  • FleepHookHandler:使用 Webhooks 将记录记录到 Fleep 对话。

记录特定服务器和网络日志

  • SocketHandler:将记录记录到 套接字,用于 UNIX 和 TCP 套接字。请参阅 示例
  • AmqpHandler:将记录记录到与 amqp 兼容的服务器。需要 php-amqp 扩展(1.0+)。
  • GelfHandler:将记录记录到 Graylog2 服务器。
  • CubeHandler:将记录记录到 Cube 服务器。
  • RavenHandler:使用 raven 将记录记录到 Sentry 服务器。
  • ZendMonitorHandler:将记录记录到 Zend Server 中的 Zend Monitor。
  • NewRelicHandler:将记录记录到 NewRelic 应用。
  • LogglyHandler:将记录记录到 Loggly 账户。
  • RollbarHandler:将记录记录到 Rollbar 账户。
  • SyslogUdpHandler:将记录记录到远程 Syslogd 服务器。
  • LogEntriesHandler:将记录记录到 LogEntries 账户。

开发中的日志记录

  • FirePHPHandler:用于 FirePHP 的处理器,在 FireBug 中提供内联 console 消息。
  • ChromePHPHandler:ChromePHP的处理器,在Chrome中提供内联控制台消息。
  • BrowserConsoleHandler:无需浏览器插件即可将日志发送到浏览器的JavaScript 控制台的处理器。支持大多数支持控制台 API的浏览器。
  • PHPConsoleHandler:PHP Console的处理器,在Chrome中提供内联控制台和通知弹出消息。

记录到数据库

  • RedisHandler:将日志记录到redis服务器。
  • MongoDBHandler:通过Mongo扩展连接将记录写入MongoDB。
  • CouchDBHandler:将日志记录到CouchDB服务器。
  • DoctrineCouchDBHandler:通过Doctrine CouchDB ODM将记录记录到CouchDB服务器。
  • ElasticSearchHandler:将记录记录到Elastic Search服务器。
  • DynamoDbHandler:使用AWS SDK将记录记录到DynamoDB表。

包装器/特殊处理器

  • FingersCrossedHandler:一个非常有趣的包装器。它接受一个记录器作为参数,并将所有级别的记录累积到定义的严重性级别超过记录。在此之后,它将所有记录(包括较低严重性的记录)发送到它包装的处理器。这意味着在实际发生错误之前,您将看不到日志中的任何内容,但一旦发生错误,您将获得完整的信息,包括调试和信息记录。这为您提供您所需的所有信息,但仅在您需要时。
  • WhatFailureGroupHandler:此处理器扩展了GroupHandler,忽略每个子处理器引发的异常。这允许您忽略远程TCP连接可能已死亡的问题,但您不希望整个应用程序崩溃,并且可能希望继续将日志记录到其他处理器。
  • BufferHandler:此处理器将接收到的所有日志记录缓冲起来,直到调用close(),此时它将一次性调用它包装的处理器上的handleBatch(),带有所有日志消息。例如,这对于一次性发送所有记录的电子邮件非常有用,而不是为每个日志记录发送一个邮件。
  • GroupHandler:此处理器将其他处理器分组。接收到的每个记录都发送到它配置的所有处理器。
  • FilterHandler:此处理器只允许给定级别的记录通过到包装的处理器。
  • SamplingHandler:围绕另一个处理器包装,允许您采样记录,如果您只想存储其中一些。
  • NullHandler:它可以处理的任何记录都将被丢弃。这可以用于在现有的处理器堆栈上暂时禁用它。
  • PsrHandler:可用于将日志记录转发到现有的PSR-3记录器。
  • TestHandler:用于测试,它记录发送给它的一切,并提供访问器来读取信息。

格式化程序

  • LineFormatter:将日志记录格式化为单行字符串。
  • HtmlFormatter:用于将日志记录格式化为人类可读的HTML表格,主要适用于电子邮件。
  • NormalizerFormatter:将对象/资源规范化为字符串,以便可以轻松序列化/编码记录。
  • ScalarFormatter:用于将日志记录格式化为标量值关联数组。
  • JsonFormatter:将日志记录编码为JSON。
  • WildfireFormatter:用于将日志记录格式化为Wildfire/FirePHP协议,仅适用于FirePHPHandler。
  • ChromePHPFormatter:用于将日志记录格式化为ChromePHP格式,仅适用于ChromePHPHandler。
  • GelfMessageFormatter:用于将日志记录格式化为Gelf消息实例,仅适用于GelfHandler。
  • LogstashFormatter:用于将日志记录格式化为logstash事件的JSON格式,对于此处列出的任何输入处理器都有用。
  • ElasticaFormatter:用于将日志记录格式化为Elastica\Document对象,仅对ElasticSearchHandler有用。
  • LogglyFormatter:用于将日志记录格式化为Loggly消息,仅对LogglyHandler有用。
  • FlowdockFormatter:用于将日志记录格式化为Flowdock消息,仅对FlowdockHandler有用。
  • MongoDBFormatter:将\DateTime实例转换为\MongoDate,并将对象递归转换为数组,仅与MongoDBHandler一起使用。

处理器

  • IntrospectionProcessor:添加日志调用来源的行/文件/类/方法。
  • WebProcessor:将当前请求URI、请求方法和客户端IP添加到日志记录中。
  • MemoryUsageProcessor:将当前内存使用情况添加到日志记录中。
  • MemoryPeakUsageProcessor:将峰值内存使用情况添加到日志记录中。
  • ProcessIdProcessor:将进程ID添加到日志记录中。
  • UidProcessor:将唯一标识符添加到日志记录中。
  • GitProcessor:将当前git分支和提交添加到日志记录中。
  • TagProcessor:将预定义的标签数组添加到日志记录中。

工具

  • Registry:Monolog\Registry类允许您配置全局日志记录器,然后可以从任何地方静态访问它们。这不是最佳实践,但可以帮助某些较旧的代码库或便于使用。
  • ErrorHandler:Monolog\ErrorHandler类允许您轻松地将Logger实例注册为异常处理器、错误处理器或致命错误处理器。
  • ErrorLevelActivationStrategy:当达到某个日志级别时激活FingersCrossedHandler。
  • ChannelLevelActivationStrategy:当达到某个日志级别时激活FingersCrossedHandler,具体取决于接收日志记录的通道。

第三方软件包

第三方处理器、格式化和处理器列在维基上。您也可以在发布后将其添加到那里。

关于

要求

  • Monolog与PHP 5.3或更高版本兼容,并且也已测试与HHVM兼容。

提交错误和功能请求

错误和功能请求在GitHub上跟踪。

框架集成

作者

约迪·博加尼奥 - [email protected] - http://twitter.com/seldaek
还可以参考参与此项目的贡献者列表

许可协议

Monolog 遵循 MIT 许可协议 - 详细信息请参阅 LICENSE 文件。

致谢

此库深受 Python 的 Logbook 库的启发,尽管大多数概念都已被调整以适应 PHP 世界。