Laravel 重写日志,让日志更优雅

admin3年前PHP教程61

更改目的:

重写了日志格式加入trace,一次请求的唯一标识加入error级别信息推送,事例中使用企业微信群助手让我们可以更及时、更优雅、更方便追踪日志信息有助于初学者了解Laravel框架

1。将文件 AppTool.php、Logger.php、LogServiceProvider.php复制到 app/Providers文件夹下,将文件BaseCommand.php复制到App\Console下

2 。在config/app.php→providers中加入


'providers' => [
 ……
 // 注册日志
  App\Providers\LogServiceProvider::class
 ……
 ];

3。在项目中使用如下方式调用


// php-fpm方式调用 日志路径 /opt/logs/xxx.log /opt/logs/xxx.error
\Log::info("info");
\Log::debug("debug");
\Log::error("error");
// 在cli方式调用 日志路径 /opt/clogs/xxx.log /opt/clogs/xxx.error
app('cLog')->info("info");
app('cLog')->debug("debug");
app('cLog')->error("error");

4。在日志级别为error时,会执行推送,本事例中采用企业微信群推送


  /**
   * 推送错误信息
   * @param $message
   */
  public function pushErrorMessage($message)
  {
    $content = "app:". static::getAppName() ."
src: ". static::getRequestSource() ."
trace:". self::getTrace() ."
url:". static::$uri_info ."
error: ". $message ."
time:". date("Y-m-d H:i:s");
    // 测试群
    $url = "xxxxxxxxxxxx";
    $result = app('\GuzzleHttp\Client')->request('POST', $url, [
      \GuzzleHttp\RequestOptions::JSON=>[
        "msgtype"=> "text",
        "text"=> [
          "content" => $content
        ]
      ]
    ]);
    $body = \GuzzleHttp\json_decode($result->getBody()->getContents(), true);
  }

5 。日志内容

注意事项:

修改如下代码不同版本bind部分会有所不同,具体根据\Illuminate\Foundation\Application::registerCoreContainerAliases中log信息修改。
如laravel6.x中为'log' => [\Illuminate\Log\LogManager::class, \Psr\Log\LoggerInterface::class],,

修改方式就如下方代码


……
// 注入全局容器
$app->instance('Log', $logger);
$app->bind('Psr\Log\LoggerInterface', function (Application $app) {
  return $app['log']->getLogger();
});
$app->bind('\Illuminate\Log\LogManager', function (Application $app) {
  return $app['log'];
});
……
有关console中使用时,建议重写\Illuminate\Console\Command::info、\Illuminate\Console\Command::line、\Illuminate\Console\Command::error,然后所有console继承BaseCommand
demo代码块:
use App\Console\BaseCommand;
 
class Demo extends BaseCommand
{
  protected $signature = 'command:demo';
  protected $description = 'demo';
  public function __construct()
  {
    parent::__construct();
  }
  public function handle()
  {
    $this->info('this is info!');
    $this->line('this is line!');
    $this->error('this is error!!!');
  }
}

demo 命令行输出:

到此这篇关于Laravel 重写日志,让日志更优雅的文章就介绍到这了,更多相关Laravel 重写日志内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

境外多ip服务器推荐那个地区的好

选择境外多IP服务器所在的地区应该根据你的具体需求和业务情况而定。以下是一些你可以考虑的因素:目标用户和市场:如果你的目标用户和市场主要在欧洲,那么选择一个位于欧洲的服务器可能会更好。同样的,如果你的...

PHP 生成器的使用详解

目录什么是生成器?生成器有什么用?生成器的应用返回空值以及中断返回键值对形式外部传递数据yield from 语法小惊喜生成器可以用count获取数量吗?使用生产器来获取斐波那契数列总结什么是生成器?...

如何动态查看及加载PHP扩展

目录查看是否已经加载了扩展动态加载扩展测试代码:在编译并完成 php.ini 的配置之后,我们就成功的安装了一个 PHP 的扩展。不过, PHP 也为我们提供了两个在动态运行期间可以查看扩展状态以及加...

php中大厂的面试题整理

找工作遇到各种各样的面试已经屡见不鲜了,虽然出的内容是五花八门,但是基本上所有面试题还是基于最核心的思想,就是一些最基础的内容使用,只有根基深厚了,才可以在往上助苗成长,本章的核心内容,就是大家最关切...

PHP实现加减乘除最简单的实例分享

本文的重点就是如何创建一个PHP类来实现两个数间的加减乘除,这种类似于极简单的计算器功能。实现起来是非常简单的,继续往下看:这里简单给大家介绍一下构造函数和private和public的定义:构造函数...

ajax和axios区别(ajax被什么代替了)

ajax和axios区别1、理论差异axios是通过Promise完成对ajax技术的一种封装,就像jquery对ajax的封装一样。ajax技术完成了部分数据的刷新,axios完成了对ajax的封装...