zigron / monolog
将日志发送到文件、套接字、收件箱、数据库和各种网络服务
Requires
- php: >=5.3.0
- psr/log: ~1.0
Requires (Dev)
- aws/aws-sdk-php: ~2.4, >2.4.8
- doctrine/couchdb: ~1.0@dev
- graylog2/gelf-php: ~1.0
- phpunit/phpunit: ~4.0
- raven/raven: ~0.5
- ruflin/elastica: 0.90.*
- swiftmailer/swiftmailer: ~5.3
- videlalvaro/php-amqplib: ~2.4
Suggests
- ext-amqp: Allow sending log messages to an AMQP server (1.0+ required)
- ext-mongo: Allow sending log messages to a MongoDB server
- aws/aws-sdk-php: Allow sending log messages to AWS services like DynamoDB
- doctrine/couchdb: Allow sending log messages to a CouchDB server
- graylog2/gelf-php: Allow sending log messages to a GrayLog2 server
- raven/raven: Allow sending log messages to a Sentry server
- rollbar/rollbar: Allow sending log messages to Rollbar
- ruflin/elastica: Allow sending log messages to an Elastic Search server
- videlalvaro/php-amqplib: Allow sending log messages to an AMQP server using php-amqplib
Provides
- psr/log-implementation: 1.0.0
README
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上跟踪。
框架集成
- 使用实现PSR-3日志接口的框架和库可以非常容易地与Monolog一起使用。
- Symfony2自带Monolog。
- Silex自带Monolog。
- Laravel 4 & 5自带Monolog。
- Lumen自带Monolog。
- PPI自带Monolog。
- CakePHP可以通过cakephp-monolog插件与Monolog一起使用。
- Slim可以通过Slim-Monolog日志记录器与Monolog一起使用。
- XOOPS 2.6自带Monolog。
- Aura.Web_Project自带Monolog。
- Nette Framework可以通过Kdyby/Monolog扩展与Monolog一起使用。
- Proton 微型框架随盒附带 Monolog。
作者
约迪·博加尼奥 - [email protected] - http://twitter.com/seldaek
还可以参考参与此项目的贡献者列表。
许可协议
Monolog 遵循 MIT 许可协议 - 详细信息请参阅 LICENSE
文件。
致谢
此库深受 Python 的 Logbook 库的启发,尽管大多数概念都已被调整以适应 PHP 世界。