门面模式 Laravel Log::info () 是如何运行的

我用的是 laravel 5.2 对应的是 Writer

namespace Illuminate\Log;
class Writer implements LogContract, PsrLoggerInterface
{
    public function info($message, array $context = [])
    {
      return $this->writeLog(__FUNCTION__, $message, $context);
    }
}

请问 Log::info () 调用的时候,他是怎么绑定到 Write 这个类的,我在 config/app.php 下没有看到相关的配置,只看到有个别名

'aliases' => [
        'Log' => Illuminate\Support\Facades\Log::class,
]

namespace Illuminate\Support\Facades;

/**
 * @see \Illuminate\Log\Writer
 */
 class Log extends Facade
 {
  /**
 * Get the registered name of the component
 * @return string
 */ 
 protected static function getFacadeAccessor()
 {
     return 'log';
  }
}
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

https://github.com/laravel/framework/blob/...

额,,,怎么找到的吗,,,因为之前看过一本书,介绍 Laravel 的,,,大概知道这些基础服务,是在应用启动时,注册到容器中的,,,然后顺着代码,,找了一下,,

public/index.php -> bootstrap/app.php -> App\Http\Kernel -> $bootstrappers -> ConfigureLogging

Laravel 请求生命周期小结

文章里看下,【用请求生成响应】小节,,,

5年前 评论
讨论数量: 8
Epona

可以看一下
Facades 外观模式背后实现原理

以及 Illuminate\Log\LogServiceProvider

5年前 评论
梦之马

@Epona LogServiceProvider 我全局搜索了一下没有这个 怎么回事
我的版本是 5.2
这个 api https://laravel.com/api/5.2/

5年前 评论

前面说了 Facades 是如何调用 Writer 中的方法的,,,

我来补充下,当你直接 Log::xxx() 时,,,是如何变成 Illuminate\Support\Facades\Log::xxx() 的,,

其实就是当你调用 Log::xxx() 时,会进入到 spl_autoload_register 注册的回调中,然后该回调中,会去你上面发的那个 aliases 数组中,拿到真正的类名,就是 Illuminate\Support\Facades\Log ,,,

简单解释:外观类(Facade)的注册和调用过程

5年前 评论
梦之马

@largezhou Illuminate\Support\Facades\Log 但是这个里面没有 info,别名只是最后指向的哪个门面

 protected static function getFacadeAccessor()
 {
     return 'log';
  }

我想知道的是 Log::info () 是在哪一步吧执行者换为了 Writer 的,在哪里有绑定操作?

5年前 评论
梦之马 (作者) (楼主) 5年前
梦之马 (作者) (楼主) 5年前

Illuminate\Log\LogServiceProvider 里 register 注册了 log

5年前 评论
梦之马 (楼主) 5年前
yanhws (作者) 5年前

框架启动会先 new Writer 放在一个容器里,大概就是:
$container['log'] = new Writer
当你使用 Log::info() 的时候,通过 getFacadeAccessor 知道 Log 这个 Facade 在 container 中的 key 是‘log’,然后就去 container 中找对象,相当于:
$container['log']->info()

5年前 评论
梦之马 (楼主) 5年前

https://github.com/laravel/framework/blob/...

额,,,怎么找到的吗,,,因为之前看过一本书,介绍 Laravel 的,,,大概知道这些基础服务,是在应用启动时,注册到容器中的,,,然后顺着代码,,找了一下,,

public/index.php -> bootstrap/app.php -> App\Http\Kernel -> $bootstrappers -> ConfigureLogging

Laravel 请求生命周期小结

文章里看下,【用请求生成响应】小节,,,

5年前 评论

。。。你是不是 面试碰到 问这些底层的了

5年前 评论
梦之马 (楼主) 5年前
golang练习生 (作者) 5年前
梦之马 (楼主) 5年前