1. Go to this page and download the library: Download slogger/laravel library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
slogger / laravel example snippets
\SLoggerLaravel\Middleware\HttpMiddleware::class
'watchers' => [
[
'class' => \SLoggerLaravel\Watchers\Parents\RequestWatcher::class,
'enabled' => env('SLOGGER_LOG_REQUESTS_ENABLED', false),
'config' => [
// log only matched paths (optional)
'only_paths' => [
// 'api/*',
],
// skip matched paths
'excepted_paths' => [
// 'health',
],
'input' => [
// apply input formatting only for these paths
'only_paths' => [
// 'api/*',
],
// hide all request params for these paths
'hidden_paths' => [
// 'auth/*',
],
],
'output' => [
// apply response formatting only for these paths
'only_paths' => [
// 'api/*',
],
// hide all response data for these paths
'hidden_paths' => [
// 'auth/*',
],
// limit json response size (bytes)
'max_content_length' => 1000000,
],
],
],
],
'masking' => [
// the value under a matching key is replaced whole, and everything below it.
// matched case-insensitively against the whole key and each of its components.
'full_keys' => [
// a word, so `auth` covers `php-auth-pw` and not `author`
'auth',
'authentication',
'authorization',
'oauth',
'passwd',
'pass',
'passcode',
'passphrase',
'pw',
// not bare `signed`: it would take `signed_at` and `signed_by` too
'signed_payload',
'signed_request',
'signed_url',
'private',
'privatekey',
'session',
'sessionid',
'csrf',
'jwt',
'bearer',
'otp',
'totp',
'cvv',
'cvc',
'pin',
'pincode',
'iban',
'ssn',
'recovery',
// spelled out: a bare `card` would take `card_type` with it
'cardnumber',
'creditcard',
'credit_card',
// not covered by `pass`, `passwd` or `pw`: `user_pwd` splits to `pwd`
'pwd',
// a wildcard matches the whole key, and the bare form with it - so a
// word listed here is not repeated above
'*token*',
'*password*',
'*secret*',
'*api_key*',
'*apikey*',
'*api-key*',
'*credential*',
'*cookie*',
'*signature*',
'*session_id*',
'*card_number*',
'*recovery_code*',
],
// two characters kept at each end, so two records still look different.
// these identify a person rather than authenticate one - never a secret here.
//
// no bare `name`: it is matched as a word component, and `job.name` holds a
// job class, `listeners[].name` a listener class, a file's `name` its filename
'partial_keys' => [
'username',
'user_name',
'nickname',
'surname',
'middlename',
'middle_name',
'fullname',
'full_name',
'*email*',
'*phone*',
'*recipient*',
'*firstname*',
'*first_name*',
'*lastname*',
'*last_name*',
],
// matched against the value and masked in place, for what no key name points
// at - an address in a log line. an invalid pattern is ignored, not fatal.
//
// order matters: first match wins, so narrow before broad. a capture group
// masks the group and keeps the rest.
'value_patterns' => [
// postgres://app:secret@db. a scheme is
new \GuzzleHttp\Client([
'base_uri' => 'https://url.com',
'handler' => app(\SLoggerLaravel\Guzzle\GuzzleHandlerFactory::class)->prepareHandler(
(new \SLoggerLaravel\RequestPreparer\RequestDataFormatters())
->add(
new \SLoggerLaravel\RequestPreparer\RequestDataFormatter(
urlPatterns: ['/api/auth/*', '*sensitive/some/*'],
hideAllRequestParameters: true,
hideAllResponseData: true
)
)
),
])
Log::debug('slogger: in a fiber?', ['yes' => Fiber::getCurrent() !== null]);
namespace App\Tracing;
use SLoggerLaravel\Context\TraceContextInterface;
class CoroutineTraceContext implements TraceContextInterface
{
public function get(string $key, mixed $default = null): mixed { /* ... */ }
public function set(string $key, mixed $value): void { /* ... */ }
}