基于 Laravel 集成的 Monolog 库对日志进行配置和记录


上一节我们讲了Laravel中的错误和异常处理,在当中我们提到捕获到异常后除了在页面上显示之外,还会将异常记录到日志中,尤其是在线上,这一点很重要,为方便我们排查问题提供了有力的依据,因为线上出现问题是不可能在浏览器中显示错误信息的(这样会暴露服务器上的文件位置和代码信息)。当然,日志的作用远远不限于此,还可以用来记录线上用户行为,站点访问信息,用户操作记录等等。

正因如此,对于大型系统而言,日志是不可或缺的模块,Laravel自然也对日志提供了完善的支持。目前Laravel集成了强大的Monolog库进行日志记录。下面我们就来大致看一下Laravel中如何对日志进行配置以及日志的简单使用。

1、日志处理器配置

首先我们来看日志处理器的配置。Laravel目前支持四种日志处理器:

  • single —— 将日志记录到单个文件中。该日志处理器对应Monolog的StreamHandler
  • daily —— 以日期为单位将日志进行归档,每天创建一个新的日志文件记录日志。该日志处理器 对应Monolog的RotatingFileHandler
  • syslog —— 将日志记录到syslog中。该日志处理器 对应Monolog的SyslogHandler
  • errorlog —— 将日志记录到PHP的error_log中。该日志处理器 对应Monolog的ErrorLogHandler

项目实际日志处理器通过config/app.php中的log配置项决定,默认配置值为single。这里我们使用默认值,不做修改:

当然如果这四种方式满足不了你的需求,还可以使用configureMonologUsing方法完全控制Monolog的日志处理器:

注:必须将上述这段代码置于bootstrap/app.php文件返回$app之前处才能生效。

2、使用Log记录日志

配置完成后,就可以在代码中使用Log门面来记录日志,Log门面背后实际上是Illuminate\Log\Writer,而在Writer的构造函数中注入了Monolog\Logger。生成的日志文件存放在storage/logs目录下。

目前,Log 门面支持八种日志级别(使用RFC 5424标准):

下面我们就来分别演示下这几种日志级别的日志记录,我们将在TestControllerlog方法中进行测试:

在浏览器中访问http://laravel.app:8000/test/log,对应在storage/logs/laravel.log记录的日志信息如下:

可见对应的日志记录包含了日志记录时间、日志级别和日志消息等信息。当然我们也可以在记录日志时传递上下文信息:

对应的日志记录为:

如果要访问底层Monolog的实例可以使用如下方法:

我们可以在浏览器页面中查看当前Monolog对象实例的属性信息:

Laravel Monolog 对象实例

我们可以从中看出当前使用的日志处理器,日志记录的位置,日志记录的格式等信息。


<< 上一篇: Laravel 5.1 中的异常处理器和HTTP异常处理实例教程

>> 下一篇: Laravel 5.1 定义事件、事件监听器以及触发事件实例教程