yaoshanliang / 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之前出现的。
用法
使用以下命令安装最新版本: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):关键条件。例如:应用程序组件不可用,意外异常。
-
ALERT (550):必须立即采取行动。例如:整个网站崩溃,数据库不可用等。这应触发短信警报并唤醒您。
-
EMERGENCY (600):紧急情况:系统不可用。
文档
请参阅doc
目录以获取更详细的文档。以下仅为Monolog附带的所有部分的列表。
处理器
记录到文件和syslog
- StreamHandler:将记录写入任何PHP流,用于日志文件。
- RotatingFileHandler:将记录写入文件,并为每天创建一个日志文件。它还会删除比
$maxFiles
更旧的文件。尽管如此,对于高知名度设置,您应使用logrotate,这只是一个快速简便的解决方案。 - SyslogHandler:将记录写入syslog。
- 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中提供内联
console
消息。 - BrowserConsoleHandler: 无需浏览器扩展,将日志发送到浏览器的Javascript
console
。支持大多数支持console
API 的浏览器。
数据库记录
- 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:The
Monolog\Registry
类允许您配置全局日志记录器,然后可以从任何地方静态访问它们。这并不是最佳实践,但在某些较旧的代码库或为了方便使用时可能会有所帮助。 - ErrorHandler:The
Monolog\ErrorHandler
类允许您轻松地将Logger实例注册为异常处理程序、错误处理程序或致命错误处理程序。 - ErrorLevelActivationStrategy:当达到某个日志级别时激活FingersCrossedHandler。
- ChannelLevelActivationStrategy:当达到某个日志级别时激活FingersCrossedHandler,取决于接收日志记录的通道。
第三方软件包
第三方处理器、格式化程序和处理器在维基百科中列出。如果您发布了一个,也可以将其添加到那里。
关于
要求
- Monolog与PHP 5.3或更高版本兼容,并且已测试与HHVM兼容。
提交错误和功能请求
错误和功能请求在GitHub上跟踪。
框架集成
- 使用PSR-3的框架和库可以非常容易地与Monolog一起使用,因为它实现了该接口。
- Symfony2自带Monolog。
- Silex自带Monolog。
- Laravel 4 & 5自带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 Micro Framework自带Monolog。
作者
Jordi Boggiano - [email protected] - http://twitter.com/seldaek
另请参阅参与此项目的贡献者列表。
许可证
Monolog 在MIT许可证下授权 - 有关详细信息,请参阅LICENSE
文件。
致谢
此库深受Python的Logbook库的启发,尽管大多数概念都已调整以适应PHP世界。