Laravel5.5中如何自定义日志行为的解析

发布时间 - 2018-08-02 00:00:00    点击率:

这篇文章给大家分享的内容是关于laravel5.5中如何自定义日志行为的解析,内容很详细,有一定的参考价值,希望可以帮助到有需要的朋友。

在 Laravel 5.6 版本中日志行为可以很容易的进行自定义,而在5.5以下版本中日志行为自定义自由度并不是很高,但是项目有需求不能因为这个就强行将项目升级为5.6吧,况且作为一个稳定的项目升级框架大版本有可能会有很多坑,基于这些原因我尝试了对 Laravel 5.5 的日志进行改造以适应我的需求。

Laravel 的日志行为大部分是在 Illuminate\Log\LogServiceProvider 中,我们可以看一下其中的代码片段:

/**
 * Configure the Monolog handlers for the application.
 *
 * @param \Illuminate\Log\Writer $log
 * @return void
 */
protected function configureDailyHandler(Writer $log)
{
 $log->useDailyFiles(
  $this->app->storagePath().'/logs/laravel.log', $this->maxFiles(),
  $this->logLevel()
 );
}

这是我最常在项目中使用的日志存储方式,可以看到日志的存储路径几近与写死的状态,无法通过外部参数轻易的更改。

最开始我想的是重写这个 Provider 然后将其注册到 app.php 的 providers 数组中,但是这种行为并不可行,因为通过查看源码, LogServiceProvider 是在框架启动时就注册。

有这样一个方法控制了这个注册行为:

protected function registerBaseServiceProviders()
{
 $this->register(new EventServiceProvider($this));

 $this->register(new LogServiceProvider($this));

 $this->register(new RoutingServiceProvider($this));
}

既然我们知道了它们是如何生效的,那么我们将这两个类继承并修改其中我们需要改变的行为进行改造,我的改造方式如下。在 app\Providers 中新建 LogServiceProvider 类继承 Illuminate\Log\LogServiceProvider ,代码如下:

useDailyFiles(
   $path, $this->maxFiles(),
   $this->logLevel()
  );
 }
}

在 config/app.php 目录中添加配置:

'log_path' => env('APP_LOG_PATH', storage_path('/logs/laravel.log')),

app 目录中新建 Foundation 目录,新建 Application 类继承 Illuminate\Foundation\Application 类,重写 registerBaseServiceProviders 方法。

register(new EventServiceProvider($this));

  $this->register(new LogServiceProvider($this));

  $this->register(new RoutingServiceProvider($this));
 }
}

说是重写其实只是将use类换从了我们自己创建的 LogServiceProvider 。

然后在 bootstrap\app.php 中将变量 $app 的 new 对象换成我们继承重写后的。

$app = new App\Foundation\Application(
 realpath(__DIR__.'/../')
);

这样我就成功的将日志路径可以随便定义了,而且来说有了这次经验我对于框架不符合我需求的地方可以做更进一步的优化以符合我的要求,而且我没有更改框架底层的代码,当框架有bug修复的时候我也可以放心的进行框架更新。

相关文章推荐:

php 自定义错误日志实例详解

Yii2 自定义日志文件写日志


# laravel  # php  # bootstrap  # 继承  # 对象  # bug  # 自定义  # 重写  # 是在  # 的是  # 我也  # 我想  # 我就  # 会有  # 有可能  # 目录中 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  怎么用AI帮你为初创公司进行市场定位分析?  黑客如何通过漏洞一步步攻陷网站服务器?  浅谈redis在项目中的应用  实例解析Array和String方法  Laravel storage目录权限问题_Laravel文件写入权限设置  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  高端建站如何打造兼具美学与转化的品牌官网?  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  IOS倒计时设置UIButton标题title的抖动问题  如何在Windows 2008云服务器安全搭建网站?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  JavaScript常见的五种数组去重的方式  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  JavaScript如何实现错误处理_try...catch如何捕获异常?  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  ,交易猫的商品怎么发布到网站上去?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  如何用JavaScript实现文本编辑器_光标和选区怎么处理  如何用腾讯建站主机快速创建免费网站?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Swift中swift中的switch 语句  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  iOS发送验证码倒计时应用  android nfc常用标签读取总结  Android Socket接口实现即时通讯实例代码  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  如何在云主机上快速搭建网站?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Android中AutoCompleteTextView自动提示  中国移动官方网站首页入口 中国移动官网网页登录  如何实现javascript表单验证_正则表达式有哪些实用技巧  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Java类加载基本过程详细介绍  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何破解联通资金短缺导致的基站建设难题?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  高端建站三要素:定制模板、企业官网与响应式设计优化  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比