robmellett / http-logging
一个轻量级的包,用于记录所有的 Guzzle HTTP 请求和响应。
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.7
- illuminate/contracts: ^10.0||^11.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- spatie/laravel-ray: ^1.35
- dev-main
- 2.0.1
- 2.0.0
- 1.0.1
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1
- dev-renovate/pestphp-pest-3.x
- dev-renovate/pestphp-pest-plugin-laravel-3.x
- dev-renovate/pestphp-pest-plugin-arch-3.x
- dev-renovate/dependabot-fetch-metadata-2.x
- dev-feature/simplify-secure-headers
- dev-renovate/actions-checkout-4.x
- dev-dependabot/github_actions/stefanzweifel/git-auto-commit-action-5
- dev-renovate/stefanzweifel-git-auto-commit-action-5.x
- dev-dependabot/github_actions/actions/checkout-4
This package is auto-updated.
Last update: 2024-09-10 02:37:53 UTC
README
一个轻量级的包,用于记录所有的 Guzzle HTTP 请求和响应。
安装
您可以通过 composer 安装此包
composer require robmellett/http-logging
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="http-logging-config"
这是发布配置文件的内容
<?php // config for RobMellett/HttpLogging return [ /* * The Laravel Log Channel to send logs to. */ 'channel' => 'http_logs', /* * Customize how the Secure Json Formatter redacts secrets. */ 'secure_json_formatter' => [ /* * Secret Values will be replaced with this value. */ 'redacted_value' => '[--REDACTED--]', /* * By default, we will attempt to look for secrets in the Laravel 'config/services.php'. * * Any values that contain the following words will be redacted: * "key", "secret", "password", "hash", "token" */ 'extract_service_secrets' => true, /* * Specific values to redact from the logs. */ 'secrets' => [ // e.g // env('API_SECRET'), ], /* * Regular expressions to redact from the logs. */ 'regexes' => [ // e.g // '/Bearer\s\w+/', ], ], ];
使用方法
您可以通过以下方式将此中间件添加到 Laravel Http 客户端或 Guzzle。
use RobMellett\HttpLogging\HttpLogging; Http::withMiddleware(new HttpLogging()) ->asJson() ->get('https://jsonplaceholder.typicode.com/posts');
您可以通过在 Laravel 日志配置文件中添加以下内容来配置日志格式化程序。
// config/logging.php 'channels' => [ // ...Previous config 'http_logs' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', // This will remove sensitive values such as "key", "secret", "hash", "token" from the logs 'formatter' => RobMellett\HttpLogging\Support\SecureJsonFormatter::class // Or if you would prefer to send sensitive data to the logs //'formatter' => Monolog\Formatter\JsonFormatter::class, ], ]
这将把以下 HTTP 请求/响应信息发送到日志中。
一个 HTTP 请求
{
"message": "Request 0b65fca7-a768-4832-8401-da52aa2885a9",
"context": {
"request_id": "0b65fca7-a768-4832-8401-da52aa2885a9",
"method": "GET",
"uri": {
"scheme": "https",
"host": "jsonplaceholder.typicode.com",
"path": "/posts",
"query": "userId=1"
},
"headers": {
"User-Agent": [
"GuzzleHttp/7"
],
"Host": [
"jsonplaceholder.typicode.com"
],
"Authorization": [
"Bearer [--REDACTED--]"
],
"Content-Type": [
"application/json"
]
}
},
"level": 100,
"level_name": "DEBUG",
"channel": "testing",
"datetime": "2023-08-16T10:13:41.356030+00:00",
"extra": {}
}
一个 HTTP 响应
{
"message": "Response 0b65fca7-a768-4832-8401-da52aa2885a9",
"context": {
"response_id": "0b65fca7-a768-4832-8401-da52aa2885a9",
"status_code": 200,
"headers": {
"Date": ["Wed, 16 Aug 2023 00:41:13 GMT"],
"Content-Type": ["application/json; charset=utf-8"],
"Transfer-Encoding": ["chunked"],
"Connection": ["keep-alive"],
"X-Powered-By": ["Express"],
"X-Ratelimit-Limit": ["1000"],
"X-Ratelimit-Remaining": ["999"],
"X-Ratelimit-Reset": ["1691921646"],
"Vary": ["Origin, Accept-Encoding"],
"Access-Control-Allow-Credentials": ["true"],
"Cache-Control": ["max-age=43200"],
"Pragma": ["no-cache"],
"Expires": ["-1"],
"X-Content-Type-Options": ["nosniff"],
"Etag": ["W/\"aa6-j2NSH739l9uq40OywFMn7Y0C/iY\""],
"Via": ["1.1 vegur"],
"CF-Cache-Status": ["HIT"],
"Age": ["18801"],
"Report-To": [
"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=gRUkX3pH6GRGwHCE%2BqKF%2ByJRGZs9MkqF8BqXa0nlmYSVzgrcmQkIGfD9lC8IlSXKvSiiyZHxrzgLy8pcOCSMRv5xFh2LyXWOkXDEtFcSr1FINwhjxRwYTZQZIaFzTulP4lUnjlrXdERp57lEXT3C\"}],\"group\":\"cf-nel\",\"max_age\":604800}"
],
"NEL": [
"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}"
],
"Server": ["cloudflare"],
"CF-RAY": ["7f75a160dc9991c0-SIN"],
"alt-svc": ["h3=\":443\"; ma=86400"]
},
"body": [
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
]
},
"level": 100,
"level_name": "DEBUG",
"channel": "testing",
"datetime": "2023-08-16T00:41:13.037161+00:00",
"extra": {}
}
安全 JSON 格式化程序
默认情况下,我们会尝试展平 Laravel config/services.php 数组,并查找包含以下单词的任何键:key、secret、password、hash、token,并将它们从日志中排除。
您可以通过将 secure_json_formatter.extract_service_secrets 配置选项设置为 false 来禁用此功能。
<?php return [ /* * Customize how the Secure Json Formatter redacts secrets. */ 'secure_json_formatter' => [ // ...previous values 'extract_service_secrets' => false, ], ];
您可以选择向 secure_json_formatter.secrets 配置选项添加自己的密钥。
<?php return [ /* * Customize how the Secure Json Formatter redacts secrets. */ 'secure_json_formatter' => [ // ...previous values /* * Specific values to redact from the logs. */ 'secrets' => [ env('SERVICE_API_SECRET'), ], ], ];
您可以选择向 secure_json_formatter.regexes 配置选项添加自己的正则表达式。
<?php return [ /* * Customize how the Secure Json Formatter redacts secrets. */ 'secure_json_formatter' => [ // ...previous values /* * Regular expressions to redact from the logs. */ 'regexes' => [ // e.g '/Bearer\s\w+/', ], ], ];
注意:如果您正在使用 Laravel 9x,则需要使用 LegacySecureJsonFormatter 类。
// config/logging.php 'channels' => [ // ...Previous config 'http_logs' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', // This will remove sensitive values such as "key", "secret", "hash", "token" from the logs 'formatter' => RobMellett\HttpLogging\Support\LegacySecureJsonFormatter::class ], ]
测试
composer test
更新日志
请参阅 更新日志 以获取有关最近更改的更多信息。
贡献
请参阅 贡献指南 以获取详细信息。
安全漏洞
请审查我们关于如何报告安全漏洞的 安全策略。
致谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。