美文网首页
Sentry接入导致阿里云日志失效问题排查

Sentry接入导致阿里云日志失效问题排查

作者: tinsonHo | 来源:发表于2019-11-08 09:43 被阅读0次

    在注册ServerProvider时,Sentry/Laravel/ServiceProvider先于AliyunLogProvider注册,而Sentry/Laravel/ServiceProvider
    register方法中(见下图)调用了$this->app->make('log'),此时log组件提前被注入为单例模式的框架默认logger,导致后续AliyunLogProvider进行注册时,调用$this-app->configureMonologUsing(...),设置自定义日志失效。

    sen-1.png

    我们先看一下框架中log组件如何实现依赖注入,主要的几个方法:

    • make: 获取绑定对象
    • bind: 简单绑定,每次都重新解析
    • <font style="color:red;">singleton: 绑定一个单例,只会解析一次,后面的调用都会从容器中- - 返回相同的实例</font>
    • instance: 绑定实例,后面的调用都会从容器中返回指定的实例

    如下图代码所示,在Laravel\Lumen\Application.php文件里的registerLogBindings方法,可以看到Psr\Log\LoggerInterface名称使用了singleton的单例绑定模式,如果存在$this->monologConfigurator则优先使用,否则使用默认的Logger。

    sen-2.png

    大家可能会疑问,开始讲的不是log吗,怎么跳出一个Psr\Log\LoggerInterface
    在Laravel\Lumen\Application.php框架核心代码中,$this->aliases(见Line:804)有一些框架默认的别名映射关系,其中'log'-> 'Psr\Log\LoggerInterface'。

    sen-3.png

    解决方案

    将SentryServiceProvider的注册放于AliyunLogProvider之后。

    相关文章

      网友评论

          本文标题:Sentry接入导致阿里云日志失效问题排查

          本文链接:https://www.haomeiwen.com/subject/sahibctx.html