侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Laravel  /  管理员 发布于 8年前   556

修改 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(new Monolog\Formatter\LineFormatter(null, null, true, true)) );});

添加以后写入日志文件为:

-rw-r--r-- 1 web web 93 Dec 18 15:52 laravel-2017-12-17-rw-r--r-- 1 web web 279 Dec 18 16:10 laravel-2017-12-18

参考:Laravel 的错误和日志记录

或者

创建app\Providers\LogServiceProvider.php 文件

修改 config\app.php providers 增加

App\Providers\LogServiceProvider::class

然后 App\Providers\LogServiceProvider.php 内容如下

useFiles(   '/var/logs/app/laravel.log',   $this->logLevel()  ); } protected function configureDailyHandler(Writer $log) {  $log->useDailyFiles(   '/var/logs/app/laravel.log', $this->maxFiles(),   $this->logLevel()  ); }}

增加请求ID request id

namespace App\Providers;use Illuminate\Support\ServiceProvider;use Carbon\Carbon;class LogServiceProvider extends ServiceProvider{ protected $log_file; /**  * Bootstrap any application services.  * @return void  */ public function boot() {  // } /**  * Register any application services.  * @return void  */ public function register() {  $this->load_request_id();  $this->log_configure(); } /**  * 生成 request_id  * @return void  */ protected function load_request_id() {  define( 'REQUEST_ID' , config('app.log_prefix').Carbon::now()->timestamp ); }  /**  * 注册 monolog pushHandler  * @return void  */ protected function log_configure() {  $log_file = $this->getLogFile();  $log_max_files = $this->getLogMaxFiles();  /**   * @doc https://d.laravel-china.org/docs/5.4/errors#自定义-Monolog-设置   */  $this->app->configureMonologUsing(function($monolog) use ($log_file , $log_max_files) {   $monolog->pushHandler(    (new \Monolog\Handler\RotatingFileHandler(     $log_file ,     $log_max_files    ))->setFormatter(new \Monolog\Formatter\LineFormatter( "[%datetime%] [".REQUEST_ID."] %channel%.%level_name%: %message% %context% %extra%\n", null, true, true))   );  }); } protected function getLogMaxFiles() {  return config('app.log_max_files' , 5); } /**  * @return mixed  */ protected function getLogFile() {  if( is_null( $this->log_file) )  {   $this->log_file = rtrim(config('app.log_path') , DIRECTORY_SEPARATOR )."/laravel.log";  }  return $this->log_file; }}

优化以后

namespace App\Providers;use Illuminate\Support\ServiceProvider;use Monolog\Formatter\LineFormatter;use Monolog\Handler\RotatingFileHandler;use Carbon\Carbon;use Monolog\Logger;;use ReflectionClass;class LogServiceProvider extends ServiceProvider{ protected $log_file; /**  * Bootstrap any application services.  *  * @return void  */ public function boot() {  // } /**  * Register any application services.  *  * @return void  */ public function register() {  $this->loadRequestId();  /**   * 根据日期来分割日志   */  $this->useDailyFiles(); } protected function loadRequestId() {  define( 'REQUEST_ID' , config('app.log_prefix').Carbon::now()->timestamp ); } /**  * 根据日期来分割日志  */ protected function useDailyFiles() {  $handler = $this->getDailyHandler()->setFormatter( $this->getDefaultFormatter() );  $errorHandler = $this->getDailyHandler(Logger::ERROR)->setFormatter( $this->getDefaultFormatter() );  $this->app->configureMonologUsing( function( $monolog) use ( $handler , $errorHandler )  {   $monolog->pushHandler( $handler );   $monolog->pushHandler( $errorHandler );  }); } /**  * 设置 日志 行格式  * @return LineFormatter  */ protected function getDefaultFormatter() {  $format = "[%datetime%] [".REQUEST_ID."] %channel%.%level_name%: %message% %context% %extra%\n";  return new LineFormatter( $format , null, true, true); } /**  * 根据日志区分  * @return \Monolog\Handler\RotatingFileHandler  */ protected function getDailyHandler( $level = Logger::DEBUG) {  return new RotatingFileHandler(   $this->logPath().$this->logName( $level ) ,   $this->maxFiles() ,   $level  ); } /**  * 日志文件最多个数  * @return int  */ protected function maxFiles() {  if ($this->app->bound('config')) {   return $this->app->make('config')->get('app.log_max_files', 30);  }  return 0; } /**  * 日志文件名称  * @return mixed  */ protected function logPath() {  $logPath = $this->app->storagePath()."/logs/";  if( $this->app->bound('config'))  {   $logPath = $this->app->make('config')->get('app.log_path', $logPath );  }  return $logPath; } /**  * log 完整文件名  * @param int $level  * @return string  */ protected function logName( $level = Logger::DEBUG ) {  return $this->getAppName().'-'.$this->getLevelName( $level ).".log"; } /**  * 获取项目app  * @return mixed  */ protected function getAppName() {  return $this->app->make('config')->get('app.name'); } /**  * 获取log错误级别名称  * @param $level  * @return mixed  */ protected function getLevelName( $level ) {  $r = new ReflectionClass( Logger::class );  $constants = array_flip( $r->getConstants() );  return $constants[$level]; }}

以上这篇自定义Laravel (monolog)日志位置,并增加请求ID的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

您可能感兴趣的文章:

  • Laravel 5.5中为响应请求提供的可响应接口详解
  • 跟我学Laravel之请求与输入
  • 跟我学Laravel之请求(Request)的生命周期
  • Laravel实现ApiToken认证请求
  • Laravel获取当前请求的控制器和方法以及中间件的例子
  • laravel请求参数校验方法
  • 解决在Laravel 中处理OPTIONS请求的问题
  • Laravel开启跨域请求的方法
  • laravel框架中表单请求类型和CSRF防护实例分析
  • Laravel框架处理用户的请求操作详解
  • Laravel5.1 框架Request请求操作常见用法实例分析


  • 上一条:
    关于laravel 日志写入失败问题汇总
    下一条:
    详解Laravel设置多态关系模型别名的方式
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • Laravel 11.14版本发布 - 新的字符串助手和ServeCommand改进(0个评论)
    • Laravel 11.12版本发布 - Artisan的`make`命令自动剪切`.php `扩展(0个评论)
    • Laravel的轻量型购物车扩展包:binafy/laravel-cart(0个评论)
    • Laravel 11.11版本发布 - 查看模型中的第三方关系:show(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客