Preface最近项目用的Monolog有点小问题。我查看了它的文档,发现它只有英文版。业余时间翻译一下。以下是其使用说明的中文翻译。有关更多翻译,请参见clarence-pan/monolog-zh-doc。使用Monolog安装核心概念。日志级别。配置日志服务以向记录添加额外数据。使用通道自定义日志格式。在Packagist(monolog/monolog)中安装Monolog并且可以通过Composer安装:兼容的自动加载器(例如Symfony2ClassLoader组件)来加载Monolog的类核心概念。每个日志服务实例(Logger)都有一个通道(name)和一个处理程序(Handler)栈。每当你向相应的日志服务实例添加一条记录时,处理程序的处理器栈就会被遍历:每个处理器将依次决定是否处理这条记录,如果是则遍历结束(译注:类似于DOM事件冒泡)。这样您就可以创建非常灵活的日志记录配置。例如,一个StreamHandler可以将所有日志写入磁盘,在其上添加一个MailHandler可以将错误日志作为电子邮件发送。该处理程序还有一个$bubble属性,用于定义是阻止记录还是处理记??录。本例中,配置MailHandler的$bubble参数为false,表示MailHandler不会继续将处理后的记录冒泡到StreamHandler。您可以创建许多日志服务实例(Logger),每个实例定义一个通道(例如数据库、请求、路由...)。每个日志服务实例可以与各种处理器组合,处理器可以共享也可以不共享。该通道将反映在日志中,使您可以轻松查看或过滤记录。每个进程也会有一个格式化程序(Formatter)。如果您不配置一个,将创建一个有意义的默认格式化程序。格式化程序用于规范化和格式化输入记录,以便处理器可以输出一些有用的信息。不支持自定义严重性级别。仅支持RFC5424中定义的八个级别(Debug/Debug、Information/Info、Prompt/Notice、Warning/Warning、Error/Error、Critical/Critical、Alert/Alert、Emergency/Emergency)用于基本筛选目的。但是对于排序或者其他需要灵活性的使用场景,可以添加一个处理程序(Processor),这样就可以在(processor)处理之前添加额外的信息(标签,用户IP...)。日志级别Monolog支持RFC5424中的日志级别:DEBUG/DEBUG(100):详细的调试信息。Information/INFO(200):有意义的事件,比如用户登录,SQL日志。NOTICE/NOTICE(250):正常但值得注意的事件。Warning/WARNING(300):异常事件,但不是错误。例如使用过时的API、错误地使用API以及其他不需要但不必要的错误。Error/ERROR(400):不需要立即关注的运行时错误,但需要专门记录和监视。Severe/CRITICAL(500):边界条件/关键场景。例如,应用程序组件不可用、意外异常。ALERT/ALERT(550):必须立即采取行动。比如整个网站宕机,数据库不可用等,这种情况应该发短信提醒,叫醒你。Emergency/EMERGENCY(600):紧急请求:系统不可用。配置日志服务下面是一个基本的配置,可以将日志记录到文件中,在DEBUG级别记录到firephp中:pushHandler(newStreamHandler(__DIR__.'/my_app.log',Logger::DEBUG));$logger->pushHandler(newFirePHPHandler());//现在你可以使用日志服务了$logger->info('Myloggerisnowready');解释。第一步是创建一个日志服务实例,后面的代码中会用到。唯一的参数是通道的名称,这在您有多个日志服务实例时很有用。(详见下文)日志服务实例本身是否知道如何处理一条日志记录?它将记录委托给一些处理程序。上面的代码在堆栈上注册了两个处理程序,以允许两种不同的方式来处理日志记录。请注意,FirePHPHandler首先被调用,因此它被添加到堆栈的顶部。这允许您临时添加一个禁用冒泡的处理程序,允许您覆盖其他配置的日志记录(处理程序)。如果您单独使用Monolog,并且正在寻找一种配置多个处理器的简单方法,请使用theorchard/monolog-cascade。它可以帮助您使用PHP数组、YAML或JSON构建复杂的日志记录配置。向记录添加额外数据Monolog提供了两种不同的方式来使用上下文向简单的文本消息添加额外信息第一种方式是使用上下文,它允许您以数组格式传递数据:info('Adding一个新用户',array('username'=>'Seldaek'));简单的处理程序(例如StreamHandler)只会将数组转换为字符串。复杂的处理器可以利用上下文(例如FirePHP将以一种很好的方式显示数组)。使用处理器第二种方法是使用处理器向所有记录添加附加数据。处理程序可以是任何可以调用的函数。处理程序接收日志记录作为参数,修改extra字段后需要返回日志记录。让我们编写一个添加一些假数据的处理程序:pushProcessor(function($record){$record['extra']['dummy']='Helloworld!';return$record;});Monolog提供了一些内置的处理程序,你可以在你的项目中使用它们。请参考相应章节。提示:处理程序可以注册到特定的处理器上,而不是直接注册到日志服务实例上,这样只能在对应的处理器上生效。使用通道通道是区分正在记录应用程序的哪些部分的好方法。这在大型项目中通常非常有用(并且被Symfony2的MonologBu??ndle使用)。假设有两个日志记录服务实例共享一个将日志写入单个日志文件的处理程序。该通道将允许您区分哪个日志服务实例记录了哪个日志。您可以轻松地按频道过滤日志。pushHandler($stream);$logger->pushHandler($firephp);//使用another$securityLogger=newLogger('security');$securityLogger->pushHandler($stream);$securityLogger->pushHandler($firephp);//或者克隆第一个,只是改变下一个通道$securityLogger=$logger->withName('安全');自定义日志格式在Monolog中,您可以轻松自定义日志的格式,无论是写入文件、套接字、邮件、数据库还是其他处理器。大多数处理器使用$record['formatted']值自动写入日志设备。该值取决于格式化程序的配置。您可以选择一个预定义的格式化程序类,也可以编写您自己的(例如可读的多行文本文件)。要配置预定义的格式化程序类,可以直接将其设置为处理器的字段://默认日期格式为“Y-m-dH:i:s”$dateFormat="Ynj,g:ia";//默认输出格式为"[%datetime%]%channel%.%level_name%:%message%%context%%extra%\n"$output="%datetime%>%level_name%>%message%%context%%extra%\n";//最后创建一个格式化程序$formatter=newLineFormatter($output,$dateFormat);//创建一个处理器$stream=newStreamHandler(__DIR__.'/my_app.log',Logger::DEBUG);$stream->setFormatter($formatter);//绑定到日志服务对象$securityLogger=newLogger('security');$securityLogger->pushHandler($stream);//也可以重用多个handler之间使用相同的格式化程序,并在多个日志服务实例之间共享这些handler。处理器、格式化器和处理器→描述: