Home >php教程 >PHP源码 >Laravel 集成的 Monolog 库对日志进行配置和记录实例

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

WBOY
WBOYOriginal
2016-06-08 17:19:381489browse

本文章为各位介绍一篇关于Laravel 集成的 Monolog 库对日志进行配置和记录的实例,具体的如下希望对各位吸帮助。

<script>ec(2);</script>

对于大型系统而言,日志是不可或缺的模块,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);    //警告但不是错误,比如使用了被废弃的API
Log::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 对象实例

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn