matteomeloni / cloudwatch-logs
用于存储和检索 AWS CloudWatch Logs 的 Eloquent 语法。
Requires
- php: ^7.4
- aws/aws-sdk-php: ^3.194
- illuminate/support: ~7|~8
Requires (Dev)
- orchestra/testbench: ~5|~6
- phpunit/phpunit: ~9.0
README
用于存储和检索 AWS CloudWatch Logs 的 Eloquent 语法。
安装
通过 Composer
$ composer require matteomeloni/aws-cloudwatch-logs
运行
$ php artisan vendor:publish --provider 'Matteomeloni\CloudwatchLogs\CloudwatchLogsServiceProvider'
在 config/aws-cloudwatch-logs.php
中更新 AWS CloudWatch Logs 配置
使用
通过 Matteomeloni\CloudwatchLogs\CloudWatchLogs
扩展你的模型
<?php namespace App\Models; use Matteomeloni\CloudwatchLogs\CloudWatchLogs; class Log extends CloudWatchLogs { protected string $logGroupName = 'LOG GROUP NAME'; protected string $logStreamName = 'LOG STREAM NAME'; }
修改器和类型转换
定义访问器
访问器在访问属性值时转换属性值。要定义访问器,在你的模型上创建一个 get {Attribute} Attribute 方法,其中 {Attribute} 是你想要访问的列的 "studly" 形式名称。
<?php namespace App\Models; use Matteomeloni\CloudwatchLogs\CloudWatchLogs; class Log extends CloudWatchLogs { public function getFooAttribute($value) { return ucfirst($value); } }
定义修改器
修改器在设置属性值时转换属性值。要定义修改器,在你的模型上定义一个 set{Attribute}Attribute
方法,其中 {Attribute}
是你想要访问的列的 "studly" 形式名称。
<?php namespace App\Models; use Matteomeloni\CloudwatchLogs\CloudWatchLogs; class Log extends CloudWatchLogs { public function setFooAttribute($value) { $this->attributes['foo'] = strtolower($value); } }
属性类型转换
你的模型 $casts 属性提供了一个方便的方法将属性转换为常见的数据类型。
$casts 属性应该是一个数组,其中键是要转换的属性的名称,值是你希望转换列到的类型。
有关更多信息,请参阅 Laravel 文档。
<?php namespace App\Models; use Matteomeloni\CloudwatchLogs\CloudWatchLogs; class Log extends CloudWatchLogs { protected $casts = [ 'foo' => 'boolean', ]; }
检索模型
模型的所有方法将检索模型关联的 logGroupName 和 logStreamName 中的所有日志。
默认情况下,将提取当前天生成的所有日志。
如果你想更改时间间隔,只需使用 whereBetween
方法
<?php use App\Models\Log; // All logs generated on the current day... foreach(Logs::all() as $log) { echo $log->attributeOne; } // All logs generated on custom time interval... $logs = Logs::whereBetween('timestamp', ['Y-m-d H:i:s', 'Y-m-d H:i:s'])->get();
构建查询
此包支持 "CloudWatch Logs Insights" 功能。
有关此功能的更多信息,请参阅 Aws CloudWatch Logs Insight 文档
要开始新的查询,可以使用 query
方法,此操作的结果是 queryId
字符串,用于检索查询结果
<?php use App\Models\Log; // Start a new query and retrieve the queryId string... $queryId = Log::query() ->where('foo','bar') ->get(); // Retrieve the query results... $logs = Log::query($queryId)->get(); // Retrieve last started query... $logs = Log::queries();
选择
select
方法允许你指定查询结果中要显示的列。
<?php use App\Models\Log; $logs = Log::query() ->select(['column1', 'column2']) ->get(); $logs = Log::query() ->select('column1', 'column2') ->get();
条件
可用的比较运算符:=
!=
<
<=
>
>=
<?php use App\Models\Log; // Chainable for 'AND'. Log::query() ->where('column', 'operator', 'value') ->where('column', 'operator', 'value') ->get(); // Chainable for 'OR'. Log::query() ->where('column', 'operator', 'value') ->orWhere('column', 'operator', 'value') ->get(); // Other types of conditions Log::whereIn('column', [1, 2, 3])->get(); Log::orWhereIn('column', [1, 2, 3])->get(); Log::whereNotIn('column', [1, 2, 3])->get(); Log::orWhereNotIn('column', [1, 2, 3])->get(); Log::whereBetween('column', [1, 100])->get(); Log::orWhereBetween('column', [1, 100])->get(); Log::whereNull('column')->get(); Log::orWhereNull('column')->get(); Log::whereNotNull('column')->get(); Log::orWhereNotNull('column')->get();
逻辑分组
有时可能需要将多个 "where" 子句分组在括号中,以在查询中实现逻辑分组。
要完成此操作,你可能需要传递一个闭包到 where
方法
<?php use App\Models\Log; Log::query() ->where('column', 'operator', 'value') ->where(function ($query) { $query->where('column', 'operator', 'value') ->orWhere('column', 'operator', 'value'); }) ->get();
排序
orderBy
方法允许按给定列排序查询。
此方法接受的第一个参数应该是你希望排序的列,第二个参数确定排序的方向,asc
或 desc
<?php use App\Models\Log; //Ordering log by column asc... Log::query()->orderBy('column')->get(); //Ordering log by column desc... Log::query()->orderBy('column','desc')->get(); //Ordering log by column desc... Log::query()->orderByDesc('column')->get();
限制
take
或 limit
方法允许限制查询返回的结果数。
<?php use App\Models\Log; Log::query()->take(10)->get(); Log::query()->limit(10)->get();
聚合
此库还提供了一系列用于检索聚合值的方法,如 count
、min
、max
、sum
和 avg
。
有关此功能的更多信息,请参阅 Aws CloudWatch Logs Insight 文档
构建查询后,您可以调用这些方法中的任何一个。
<?php use App\Models\Log; $count = Log::query() ->where('level_code', 500) ->count(); //Other types of aggregates Log::query()->min('column'); Log::query()->max('column'); Log::query()->sum('column'); Log::query()->avg('column'); Log::query()->average('column'); //Alias for the "avg" method
您可以通过groupBy
方法对结果进行分组和聚合。
在这种情况下,操作的结果将是一个集合。
除了特定的列之外,还可以使用AWS CloudWatch Logs Insights服务提供的所有功能进行分组。
<?php use App\Models\Log; Log::query() ->groupBy('column') ->groupBy('bin (1m)') ->count();
检索单个模型
除了检索所有与给定查询匹配的记录外,您还可以使用find
或first
方法检索单个记录。
<?php use App\Models\Log; /** * Retrieve a log by its logRecordPointer * (you can retrieve that from the response of insight query)... */ $log = Log::find($ptr); // Retrieve the first model matching the query constraints... $log = Log::all()->first(); // Find a model by its ptr or throw an exception... $log = Log::findOrFail($ptr); // Find multiple models by their ptr. $logs = Log::findMany([$ptr1,$ptr2,$ptr3]);
存储新日志
要将新记录插入AWS CloudWatch Log,您应该创建一个新的模型实例并设置模型上的属性。
然后,在模型实例上调用save方法
<?php use App\Models\Log; $log = new Log(); $log->attributeOne = 'foo'; $log->attributeTwo = 'bar'; $log->save();
或者,您可以使用create方法使用单个PHP语句“保存”新日志。create方法将返回插入的日志实例给您
<?php use App\Models\Log; $log = Log::create([ 'attributeOne' => 'foo', 'attributeTwo' => 'bar' ]);
要求
-
PHP 7.4或更高版本
-
Laravel 7或更高版本
变更日志
有关最近更改的更多信息,请参阅变更日志。
测试
$ composer test
贡献
有关详细信息和工作清单,请参阅contributing.md。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件matteomelonig@gmail.com联系,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。