1. 云栖社区>
  2. PHP教程>
  3. 正文

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

作者:用户 来源:互联网 时间:2017-12-01 14:25:19

日志配置

基于 Laravel 集成的 Monolog 库对日志进行配置和记录 - 摘要: 本文讲的是基于 Laravel 集成的 Monolog 库对日志进行配置和记录, 上一节我们讲了Laravel中的错误和异常处理,在当中我们提到捕获到异常后除了在页面上显示之外,还会将异常记录到日志中,尤其是在线上,这一点很重要,为方便我们排查问题提供了有力的依据,因为线上出现问题是不可能在浏览器中显示错误信息

基于 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 。这里我们使用默认值,不做修改:

'log' => 'single',

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

$app->configureMonologUsing(function($monolog) { $monolog->pushHandler(...);});

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

2、使用Log记录日志

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

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

Log::emergency($error); //紧急状况,比如系统挂掉Log::alert($error); //需要立即采取行动的问题,比如整站宕掉,数据库异常等,这种状况应该通过短信提醒 Log::critical($error); //严重问题,比如:应用组件无效,意料之外的异常Log::error($error); //运行时错误,不需要立即处理但需要被记录和监控Log::warning($error); //警告但不是错误,比如使用了被废弃的APILog::notice($error); //普通但值得注意的事件Log::info($error); //感兴趣的事件,比如登录、退出Log::debug($error); //详细的调试信息

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

public function log(){Log::emergency("系统挂掉了");Log::alert("数据库访问异常");Log::critical("系统出现未知错误");Log::error("指定变量不存在");Log::warning("该方法已经被废弃");Log::notice("用户在异地登录");Log::info("用户xxx登录成功");Log::debug("调试信息");}

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

[2015-11-09 14:24:05] local.EMERGENCY: 系统挂掉了 [2015-11-09 14:24:05] local.ALERT: 数据库访问异常 [2015-11-09 14:24:05] local.CRITICAL: 系统出现未知错误 [2015-11-09 14:24:05] local.ERROR: 指定变量不存在 [2015-11-09 14:24:05] local.WARNING: 该方法已经被废弃 [2015-11-09 14:24:05] local.NOTICE: 用户在异地登录 [2015-11-09 14:24:05] local.INFO: 用户xxx登录成功 [2015-11-09 14:24:05] local.DEBUG: 调试信息

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

Log::info("用户xxx登录成功",['user_id'=>1]);

对应的日志记录为:

[2015-11-09 14:25:47] local.INFO: 用户xxx登录成功 {"user_id":1}

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

$monolog = Log::getMonolog();dd($monolog);

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

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

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

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索日志 配置 ,以便于您获取更多的相关知识。