// 这行代码的作用是创建一个"自定义日志本"
return new CustomLogger(storage_path('logs/app.log'));

我们拆成小部分,像拆积木一样一个个看~

第一部分:new CustomLogger(...) → 买一个“特别的日记本”

new CustomLogger(...)  // "new"是买新东西的意思,CustomLogger是"特别的日志本"
  • 想象CustomLogger是一个带锁的日记本(比普通本子本特别)
  • new就像你去商店买了一个新的带锁日记本
  • 括号里的内容是给这个日记本的“使用说明”

第二部分:storage_path('logs/app.log') → 日记本的“存放位置”

storage_path('logs/app.log')  // 这是告诉日记本"要存在哪里"

我们拆得更细:

  • storage_path():Laravel里的“储物间”,专门放文件的地方
  • 'logs/app.log':储物间里的“日志文件夹”(logs)里的“app.log文件”
  • 合起来就是:“把日记本放在储物间的日志文件夹里,名字叫app.log”

就像你说“我的日记本要放在书桌的抽屉里,名字叫‘我的小秘密’”

第三部分:return → 把日记本“交给Laravel”

return  // 意思是"把这个东西给需要的人"
  • 就像你买了日记本后,告诉妈妈“这个日记本给家里用哦”
  • 在这里是告诉Laravel:“以后系统要记日志,就用这个新的日记本吧”

完整例子:创建一个简单的自定义日志本

我们来做一个能写日志的“自定义日记本”:

<?php
// 文件:app/Loggers/CustomLogger.php
namespace App\Loggers;

// 自定义日志本类(就像带锁日记本的设计图)
class CustomLogger {
    // 日记本的存放路径(比如"抽屉/我的小秘密.txt")
    private $logFile;
    
    // 造日记本时,告诉它要存在哪里(构造函数)
    public function __construct($filePath) {
        $this->logFile = $filePath;  // 记住存放位置
    }
    
    // 写日志的方法(像在日记本上写东西)
    public function log($message) {
        // 要写的内容:时间 + 消息(比如"2024-08-16 10:00: 今天玩了积木")
        $content = date('Y-m-d H:i:s') . ' - ' . $message . "\n";
        
        // 把内容写到文件里(就像把字写到日记本上)
        file_put_contents($this->logFile, $content, FILE_APPEND);
    }
}

然后在Laravel的配置里使用它:

<?php
// 文件:config/logging.php(Laravel的日志配置文件)

// 引入我们的自定义日志本
use App\Loggers\CustomLogger;

// 在配置里告诉Laravel用我们的日志本
return [
    'default' => 'custom',
    'channels' => [
        'custom' => [
            'driver' => 'custom',
            // 这里就是我们开头的代码啦
            'via' => function () {
                // 创建自定义日志本,存到storage/logs/app.log
                return new CustomLogger(storage_path('logs/app.log'));
            },
        ],
    ],
];

现在用这个日志本记东西:

<?php
// 在控制器里写日志
namespace App\Http\Controllers;

use Illuminate\Support\Facades\Log;

class PlayController extends Controller {
    public function playWithToys() {
        // 用我们的自定义日志本记一条:"玩了积木"
        Log::info('玩了积木');
        
        return "玩得开心!";
    }
}

执行后,storage/logs/app.log文件里会出现:

2024-08-16 10:00:00 - 玩了积木

知识体系小总结(像玩日记本的规则)

  1. new CustomLogger():创建一个自定义的日志工具(特别的日记本)
  2. storage_path():Laravel里专门存文件的地方(储物间)
  3. 'logs/app.log':日志文件的具体位置和名字(抽屉里的日记本)
  4. return:把创建好的日志工具交给系统使用(告诉大家用这个日记本)
  5. 自定义日志的作用:可以自己控制日志怎么写、存在哪,比如加密码、加特殊格式

底层原理(简单说)

  1. 当Laravel需要写日志时,会找配置里的“日志通道”
  2. 看到via选项,就会执行那个函数,得到我们创建的CustomLogger对象
  3. CustomLogger知道日志要写到storage/logs/app.log文件
  4. 当调用Log::info()时,实际是调用CustomLoggerlog()方法,把内容写到文件里

就像:

  • 家里规定“记家庭日记要用客厅的蓝色本子”(配置)
  • 你需要时就去拿那个蓝色本子(new CustomLogger
  • 本子知道自己要放在客厅抽屉(storage_path
  • 写完后就存在那里,大家都能看(日志文件)

现在你知道啦,这句话就是在给Laravel指定一个“特别的日记本”,让系统按我们的想法记录发生的事情,就像你用自己的日记本记录每天玩了什么玩具一样简单~

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐