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

更改目的:

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

1。将文件 AppTool.phpLogger.phpLogServiceProvider.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::registerCoreContainerAliaseslog信息修改。
如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 重写日志内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Laravel 5.5 异常处理 & 错误日志的解决

    简介 Laravel 默认已经为我们配置好了错误和异常处理,我们在 App\Exceptions\Handler 类中触发异常并将响应返回给用户. 此外,Laravel 还集成了 Monolog 日志库以便提供各种功能强大的日志处理器,默认情况下,Laravel 已经为我们配置了一些处理器,我们可以选择单个日志文件,也可以选择记录错误信息到系统日志. 配置 调试模式 配置文件 config/app.php 中的 debug 配置项表示是否开启调试模式,调试模式下会将错误信息直接暴露给客户端. 默

  • laravel日志优化实例讲解

    日志浏览 扩展地址:arcanedev/log-viewer 安装扩展 composer require arcanedev/log-viewer 注册服务,在config/app.php中的providers添加以下内容 'providers' => [ ... Arcanedev\LogViewer\LogViewerServiceProvider::class, ], 如果有需要修改路由或者配置的.需要发布相关文件进行修改 php artisan log-viewer:publish 访问

  • 关于laravel 日志写入失败问题汇总

    Throw问题 项目部署到Linux 服务器上后有时会出现 每日日志无法写入的问题.由此汇总一下常出现的问题及解决方式. 权限问题 导致无法写入日志的问题,是由于代码更新时添加了文件是 root 用户,所以创建日志文件也是root 权限,导致其它用户的 www 权限无法写入日志文件中. 所以修改 storage/logs/ 的用户权限为 www chown www:www storage/logs -R 注意:如果用户使用supervisord服务运行队列的话,如果队列里有日志记录,那么运行的用

  • 自定义Laravel (monolog)日志位置,并增加请求ID的实现

    修改 bootstrap/app.php 文件 $app->configureMonologUsing(function($monolog) use ($app) { $monolog->pushHandler( (new Monolog\Handler\RotatingFileHandler( '/var/logs/app/laravel', $app->make('config')->get('app.log_max_files', 5) ))->setFormatter

  • 解决laravel中日志权限莫名变成了root的问题

    框架用的是laravel, 其中把一些数据写入日志, 保存到storage目录中, 刚开始查看正常, 再过一段时间文件权限就自动变成了root权限了, 导致只有www权限的laravel不能写入日志中 定时任务抓取图片的时候存储不了报权限错误 //=================== 解决方法如下: linux可以指定crontab的用户, 平常crontab -e添加的任务都是在root用户的定时任务下, 如果要用nobody用户执行, 需要使用 crontab -u nobody -l 然

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

    更改目的: 重写了日志格式 加入trace,一次请求的唯一标识 加入error级别信息推送,事例中使用企业微信群助手 让我们可以更及时.更优雅.更方便追踪日志信息 有助于初学者了解Laravel框架 1.将文件 AppTool.php.Logger.php.LogServiceProvider.php复制到 app/Providers文件夹下,将文件BaseCommand.php复制到App\Console下 2 .在config/app.php→providers中加入 'providers'

  • Python中更优雅的日志记录方案详解

    目录 常见使用 loguru 安装 基本使用 详细使用 在 Python 中,一般情况下我们可能直接用自带的 logging 模块来记录日志,包括我之前的时候也是一样.在使用时我们需要配置一些 Handler.Formatter 来进行一些处理,比如把日志输出到不同的位置,或者设置一个不同的输出格式,或者设置日志分块和备份.但其实个人感觉 logging 用起来其实并不是那么好用,其实主要还是配置较为繁琐. 常见使用 首先看看 logging 常见的解决方案吧,我一般会配置输出到文件.控制台和

  • JS复杂判断的更优雅写法代码详解

    我们编写js代码时经常遇到复杂逻辑判的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得越来越臃肿,越来越看不懂,那么如何更优雅的写判断逻辑,本文带你试一下. 举个例子 先看一段代码 /** * 按钮点击事件 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 商品售罄 4 开团成功 5 系统取消 */ const onButtonClick1 = (s

  • Laravel重写用户登录简单示例

    本文实例讲述了Laravel重写用户登录的方法.分享给大家供大家参考,具体如下: class AuthController extends Controller { // use ThrottlesLogins, AuthenticatesAndRegistersUsers; protected $redirectTo = 'admin/index'; protected $loginView = 'admin/login'; protected $guard = 'admin'; protec

  • Go语言中更优雅的错误处理

    从现状谈起 Go语言受到诟病最多的一项就是其错误处理机制.如果显式地检查和处理每个error,这恐怕的确会让人望而却步.下面我们将给大家介绍Go语言中如何更优雅的错误处理. Golang 中的错误处理原则,开发者曾经之前专门发布了几篇文章( Error handling and Go和 Defer, Panic, and Recover.Errors are values )介绍.分别介绍了 Golang 中处理一般预知到的错误与遇到崩溃时的错误处理机制. 一般情况下,我们还是以官方博客中的错误

  • 如何利用Proxy更优雅地处理异常详解

    代码不会全部按照我们的预期运行,可能会有意料之外的情况,为了保证程序的健壮性,要进行异常处理. 比如一个对象的所有方法,都应该做异常处理,但是,如果每个方法都加 try catch 又太麻烦: const obj = { aaa() { try { // aaa } catch(e) { // xxxx } }, bbb() { try { // bbb } catch(e) { // xxxx } }, ccc() { try { // ccc } catch(e) { // xxxx } }

  • 如何利用Promises编写更优雅的JavaScript代码

    你可能已经无意中听说过 Promises,很多人都在讨论它,使用它,但你不知道为什么它们如此特别.难道你不能使用回调么?有什么了特别的?在本文中,我们一起来看看 Promises 是什么以及如何使用它们写出更优雅的 JavaScript 代码. Promises 易于阅读 比如说我们想从 HipsterJesus 的API中抓取一些数据并将这些数据添加到我们的页面中.这些 API 的响应数据形式如下: { "text": "<p>Lorem ipsum...<

  • Python使用CMD模块更优雅的运行脚本

    本文实例讲述了Python使用CMD模块更优雅的运行脚本的方法.分享给大家供大家参考.具体分析如下: 平时由于经常给测试人员调试一些东西,虽然写了一些脚本,感觉还是不方便. python的cmd模块提供的更优雅的方式,很喜欢. 刚写了一些平时常用的测试代码: # -*- coding:utf-8 -*- import os, sys from datetime import datetime import cmd import warnings from django.conf import s

  • 解决Mysql收缩事务日志和日志文件过大无法收缩问题

    一.MS SQL SERVER 2005 --1.清空日志       exec('DUMP TRANSACTION 数据库名 WITH NO_LOG') --2.截断事务日志:      exec('BACKUP LOG 数据库名 WITH NO_LOG') --3.收缩数据库文件(如果不压缩,数据库的文件不会减小      exec('DBCC SHRINKDATABASE(数据库名) ') --4.设置自动收缩      exec('EXEC sp_dboption 数据库名,autosh

  • 详解vue-meta如何让你更优雅的管理头部标签

    在 Vue SPA 应用中,如果想要修改HTML的头部标签,或许,你会在代码里,直接这么做: // 改下title document.title = 'what?' // 引入一段script let s = document.createElement('script') s.setAttribute('src', './vconsole.js') document.head.appendChild(s) // 修改meta信息,或者给html标签添加属性... // 此处省略一大坨代码...

随机推荐