Laravel是怎样使用monolog的

lv中最常见使用日志的方式:\Illuminate\Support\Facades\Log::error(__CLASS__ . __FUNCTION__ . " xxx failed! $p1 $p2");用这个例子来分析一下。
首先,看一下\Illuminate\Support\Facades\Log这个lv的门面类。

<?phpnamespace 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';}
}
<?phpnamespace Illuminate\Support\Facades;use Mockery;
use RuntimeException;
use Mockery\MockInterface;<?phpnamespace Illuminate\Support\Facades;use Mockery;
use RuntimeException;
use Mockery\MockInterface;abstract class Facade
{/*** The application instance being facaded.** @var \Illuminate\Contracts\Foundation\Application*/protected static $app;/*** The resolved object instances.** @var array*/protected static $resolvedInstance;......(省略)public static function __callStatic($method, $args){$instance = static::getFacadeRoot();if (! $instance) {throw new RuntimeException('A facade root has not been set.');}switch (count($args)) {case 0:return $instance->$method();case 1:return $instance->$method($args[0]);case 2:return $instance->$method($args[0], $args[1]);case 3:return $instance->$method($args[0], $args[1], $args[2]);case 4:return $instance->$method($args[0], $args[1], $args[2], $args[3]);default:return call_user_func_array([$instance, $method], $args);}}
}

可见关键在其父类Illuminate\Support\Facades\Facade,这个类有个魔术方法:__callStatic,每当调用一个没有定义的静态函数就会进入这个函数,这个函数就可以处理所有门面函数。但是门面函数运行时候对应的实例是怎么来的呢?我们看到是这个static::getFacadeRoot();返回的。它是通过框架根据Log门面类的getFacadeAccessor方法返回的类别名log,再在lv容器中获取log实例的,而log对应的实例是在app实例化就一并存在于容器中了。
log对应的实例类是\Illuminate\Log\Writer,进入其中就能发现它是对monolog的一层封装。


ok,以上我们终于跳过了lv框架的这一层封装,如果不能理解上面的内容完全不同担心,lv容器、门面的概念多使用lv做一些东西特别是使用别人开源的lv组件自然就能理解了。


\Illuminate\Log\Writer类中是对monolog实例的封装,但是monolog又是什么时候实例化的呢?
Illuminate\Foundation\Http\Kernel类中我们可以发现原来是Illuminate\Foundation\Bootstrap\ConfigureLogging这个类,进入它。我们发现$app->instance('log', $log = new Writer(
new Monolog($app->environment()), $app['events'])
);
,就是在这个位置完成了实例化。

monolog日志组件

这是一个强大的php日志组件,很多优秀框架都在使用,关于它的用法最好的文档就是其官方的README了。

Laravel之Monolog全解析相关推荐

  1. Go modules基础精进,六大核心概念全解析(下)

    Go 语言做开发时,路径是如何定义的?Go Mudules又为此带来了哪些改变?本文将会全面介绍Go Modules六大核心概念,包括了设计理念与兼容性原则等,掌握这些技术点对于管理和维护Go 模块有 ...

  2. 第四章:Spring项目文件上传两种方式(全解析)

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  3. 阿里秋招面试全解析(含内推岗)

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  4. Vuebnb:一个用vue.js和Laravel构建的全栈应用

    2019独角兽企业重金招聘Python工程师标准>>> 今年我一直在写一本新书叫全栈Vue网站开发:Vue.js,Vuex和Laravel.它会在Packt出版社在2018年初出版. ...

  5. Apache Web服务器访问控制机制全解析

    Apache Web服务器访问控制机制全解析 原文请见: http://netsecurity.51cto.com/art/201102/245666.htm Linux下的Aapche服务器提供了强 ...

  6. 6.15 Unity引擎渲染效率全解析

    UWA新晋主播赵福恺从Unity渲染模块中的各种渲染效果性能.PBR渲染性能以及阴影的渲染性能三个角度分别进行了详细的分析总结.为响应各大听众的需求,小编奉上完整视频回顾,同时也向看完直播才下班的五好 ...

  7. python读取txt文件写入-Python读写txt文本文件的操作方法全解析

    一.文件的打开和创建 >>> f = open('/tmp/test.txt') >>> f.read() 'hello python! hello world! ...

  8. jQuery Ajax 实例 全解析(转)

    jQuery Ajax 实例 全解析 jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我 ...

  9. Fragment全解析系列

    文/YoKey(简书作者) 原文链接:http://www.jianshu.com/p/d9143a92ad94 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者". F ...

最新文章

  1. 让我们定义一个ggplot版本的华夫饼图吧
  2. Google Maps Android API V2的使用及问题解决
  3. 真是虚惊一场的i_like_cpp
  4. ajax该什么时候用
  5. 刷题总结——瞭望塔(bzoj1038)
  6. 60-172-010-使用-Broadcast-简介
  7. java服务器返回错误码,java - java.io.IOException:服务器返回URL的HTTP响应代码:409 - 堆栈内存溢出...
  8. ppt设置外观样式_PPT办公技巧:PPT内置主题样式的3种运用办法
  9. learn to study
  10. Spark深入浅出企业级最佳实践
  11. 常微分方程的数值解法
  12. MySQL数据库介绍
  13. OPPO a1刷机包下载_OPPOA1密码忘记了?来这里搞定
  14. OpenGl读取导入3D模型并且添加鼠标移动旋转显示
  15. Windows Defender怎么添加排除项?
  16. Ubuntu连接蓝牙鼠标键盘
  17. Typescript 类型推断
  18. JavaScript 什么是函数式编程
  19. mysql root密码是什么_mysql如何查看root密码是什么
  20. 数据骗子无处不在,教你拆穿所谓“万金油”

热门文章

  1. 用饮水机教你什么是RAID
  2. M-Arch(番外4)GD32L233评测-系统资源主要频率获取和打印
  3. Twisted Circuit
  4. popper.js 案例
  5. 函数声明以及函数原型
  6. 相见恨晚的68句话——每句话可以品半辈子,你有同感吗?
  7. JiaThis社区分享按钮的使用,提升网站访问流量
  8. 数值类型翻转教学设计
  9. 即食燕窝有营养价值吗?值得购买吗?
  10. 项目小实战:51单片机控制的手机蓝牙遥控小车设计(程序 元件清单 实物图)