通过配置文件定义和记录 log
laravel 的框架的 log 功能的配置文件在 config\logging.php,可见 channel 里自带的一些 log 通道,记录 log 文件默认位于 storage\logs\ 文件夹下,如下图:
我们可以添加一个自定义的通道,如下:
'testmylog' => [
'driver' => 'single',
'path' => storage_path('mylogs/Mylog.log'),
'level' => 'debug',
],
storage_path() 指定的是项目内的 storage 文件夹下,所以 path 为 \storage\mylogs\Mylog.log
定义好 log 通道后,我们可以指定这个通道来向 log 文件内写入内容,如下:
use Illuminate\Support\Facades\Log;
Log::channel('testmylog')->info('hello log testing', ['apple' => 'red', 'banana' => 'yellow']);
通过代码来定义和使用 log
通过代码的形式来定义和记录 log 的方式有两种,分别是通过 Illuminate\Support\Facades\Log 和 Monolog\Logger,下面我们分别举例
Illuminate\Support\Facades\Log
use Illuminate\Support\Facades\Log;
我们先创建一个名为 channel 的 log 通道, 并指定记录的 log 文件的路径
$channel1 = Log::build([
'driver' => 'single',
'path' => storage_path('mylogs/channel1.log'),
]);
然后我们将需要记录的信息记录到 log 文件中
$channel1->info('Record in channel 1');
带参数数组记录 log
$channel1->info('Record in channel 1', ['param1' => '1', 'param2' => '2']);
我们也可以将同一条内容同时记录到多个 log 通道指定的文件里
$channel2 = Log::build([
'driver' => 'single',
'path' => storage_path('mylogs/channel2.log'),
]);
Log::stack([$channel1, $channel2])->info('Something happened on both channel1 and channel2');
Monolog\Logger
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
我们假定要创建一个名为 mypersionallog 的文件来记录 log, 这个文件位于 storage\mylogs\ 的目录下
创建 logger 对象
$loggerObj = new Logger('mypersionallog');
指定路径
$loggerObj->pushHandler(new StreamHandler(storage_path('logs/mypersionallog.log'), Logger::DEBUG));
写入内容
$loggerObj->info('Say something', ['aa' => 'bb', 'cc' => 'dd']);