CakePHP 日志记录


登录 CakePHP 是一项非常简单的任务。你只需要使用一种功能。你可以为任何后台进程(如 cronjob)记录错误、异常、用户活动、用户采取的操作。在 CakePHP 中记录数据很容易。 log() 函数由 LogTrait 提供,它是几乎所有 CakePHP 类的共同祖先。


在CakePHP中记录日志是一个非常简单的任务,只需要使用log()函数,就可以记录错误、异常、用户活动、用户采取的操作、任何后台进程(如cronjob)。log()函数是由LogTrait提供的,它是几乎所有CakePHP类的共同祖先。

日志配置


可以在config/app.php文件中配置日志,该文件中有一个Log数组用于配置日志选项,如下所示:

Programming

默认情况下,已经配置了两个日志级别:errordebug,每一种都会处理不同级别的信息:

CakePHP 支持多种日志级别,如下所示:

  • Emergency: 系统无法使用

  • Alert: 必须立即采取行动

  • Critical: 临界条件

  • Error: 错误条件

  • Warning: 警告条件

  • Notice: 正常但需要注意的情况

  • Info: 信息性消息

  • Debug: 调试级消息

记录日志


我们可以通过两种方式记录日志:使用静态write()方法 和 log()快捷方法。

首先是使用静态write()方法,下面是静态write()方法的语法:

语法write( integer|string $level, mixed $message, string|array $context [] )
参数

消息的严重性级别,该值必须是匹配已知级别的整数或字符串;

要记录的消息内容;

用于记录消息的额外数据,可以传递特殊范围键以用于进一步过滤要使用的日志引擎。如果传递了字符串或数字索引数组,它将被视为作用域键。参考Cake\Log\Log::config()查看有关日志记录范围的更多信息。

返回

布尔值

描述

将给定的消息和类型写入所有配置的日志适配器,配置的适配器同时传递 $level 和 $message 变量,$level 是以下字符串/值之一。

第二种是使用log()快捷键函数,在任何使用LogTrait的地方都可以使用,调用log()将在内部调用Log::write()。

修改config/routes.php文件,如下所示:

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
    $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
        'httpOnly' => true,
    ]));
    $builder->applyMiddleware('csrf');
    // $builder->connect('/pages',
        ['controller'=>'Pages','action'=>'display', 'home']);
    $builder->connect('logex',['controller'=>'Logexs','action'=>'index']);
    $builder->fallbacks();
});

新建src/Controller/LogexsController.php文件,并将以下代码复制到该文件中:

<?php
    namespace App\Controller;
    use App\Controller\AppController;
    use Cake\Log\Log;
    class LogexsController extends AppController{
        public function index(){
            /*The first way to write to log file.*/
            Log::write('debug',"Something didn't work.");
            /*The second way to write to log file.*/
            $this->log("Something didn't work.",'debug');
        }
    }
?>

新建src/Template/Logexs/index.php文件,并将以下代码复制到该文件中:

Something is written in log file. Check log file logs\debug.log

访问http://localhost/cakephp4/logex执行上述示例,输出如下所示:

Debugs

然后日志会被添加到 log/debug.log 文件中:

Logfile