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

admin3年前PHP教程94

更改目的:

重写了日志格式加入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 重写日志内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

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

相关文章

国外站群服务器为何如此受欢迎的原因

国外站群服务器为何如此受欢迎的原因?1、应用国外站群服务器的网站更易于维护,假如应用的网站服务器沒有具备的那麼很多个IP得话,万一某一网站遭受恶意攻击,相同IP绑定了很多个网站,那麼就难以排查是哪个网...

php curl返回错误码60如何解决

今天有用户调用一个curl方法时,遇到如下的错误,查找了一些资料终于解决了。解决方法记录一下,留着自己以后自已查阅用。错误代码cURL error 60: SSL certificate proble...

GPU服务器的使用案例香港gpu服务器租用费用

GPU服务器的使用案例?1、深度学习的应用案例深度学习模仿的是我们人类大脑运行的方式——从经验中学习,它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习的实际案...

如何选择适合自己的江西GPU服务器

选择适合自己的GPU服务器是一个重要的决策,因为它直接影响到你的工作效率和成果。下面是一些指南,帮助你选择适合自己的GPU服务器。确定你的需求在选择GPU服务器之前,你需要明确你的需求是什么。你需要考...

海外多ip服务器可以指定出口ip吗

一般来说,海外多IP服务器可以指定出口IP地址。不过这取决于你使用的服务器提供商和服务级别协议(SLA)。一些服务器提供商可能会提供具有IP地址管理功能的控制面板,允许你指定使用哪个IP地址作为出口I...

php中intval()的实例用法

1、intval()函数可以获取变量的整数值,常被用来进行数据类型转换,将字符串类型的变量转换为为整数类型。2、语法为“intval($var[,$base])”。实例2345...