PHP code example of michael4d45 / context-logging

1. Go to this page and download the library: Download michael4d45/context-logging 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/ */

    

michael4d45 / context-logging example snippets


use Illuminate\Foundation\Configuration\Middleware;
use Michael4d45\ContextLogging\Middleware\RequestContextMiddleware;
use Michael4d45\ContextLogging\Middleware\EmitContextMiddleware;

->withMiddleware(function (Middleware $middleware): void {
    $middleware->append(RequestContextMiddleware::class);
    $middleware->append(EmitContextMiddleware::class);
})

$middleware->prepend(RequestContextMiddleware::class);

use Illuminate\Foundation\Configuration\Middleware;
use Michael4d45\ContextLogging\Middleware\RequestContextMiddleware;
use Michael4d45\ContextLogging\Middleware\EmitContextMiddleware;

->withMiddleware(function (Middleware $middleware): void {
    $middleware->use([
        \Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks::class,
        \Illuminate\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Http\Middleware\ValidatePostSize::class,
        \Illuminate\Foundation\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

        // Contextual logging
        RequestContextMiddleware::class,
        EmitContextMiddleware::class,
    ]);
})



namespace App\Http\Controllers;

use Illuminate\Support\Facades\Log;

class OrderController extends Controller
{
    public function store(Request $request)
    {
        Log::info('Order placed', ['order_id' => 123]);

        // More application logic...
        Log::info('Payment processed', ['amount' => 99.99]);

        // Even error conditions
        try {
            $this->processOrder();
        } catch (\Exception $e) {
            Log::error('Order processing failed', [
                'error' => $e->getMessage(),
                'order_id' => 123
            ]);
        }

        return response()->json(['status' => 'success']);
    }
}

use Michael4d45\ContextLogging\HttpClientInstrumentation;
use Michael4d45\ContextLogging\HttpContextHooks;

public function boot(): void
{
  // Optional explicit registration.
  app(HttpClientInstrumentation::class)->register();

  // Optional request hook.
  HttpContextHooks::beforeRequest(function (array $payload): array {
    $payload['request']['service'] = 'external-api';

    return $payload;
  });

  // Optional response hook.
  HttpContextHooks::afterResponse(function (array $payload): array {
    $payload['response']['classified_as'] = ($payload['response']['status'] ?? 0) >= 500
      ? 'server_error'
      : 'ok';

    return $payload;
  });
}

'http' => [
  'enabled' => true,
  'capture_headers' => false,
  'capture_body' => false,
  'redact_value' => '[redacted]',
  'redact_body_fields' => ['password', 'token', 'secret'],
  'redact_query_params' => ['token', 'access_token', 'api_key'],
],

use Illuminate\Support\Facades\Http;
use Michael4d45\ContextLogging\ContextStore;

public function syncOrders(ContextStore $contextStore): void
{
  $httpId = $contextStore->beginHttpCall([
    'method' => 'GET',
    'url' => 'https://api.example.com/orders',
  ]);

  try {
    $response = Http::get('https://api.example.com/orders');

    $contextStore->addHttpContext($httpId, [
      'service' => 'orders-api',
      'operation' => 'sync_orders',
    ]);

    $contextStore->completeHttpCall($httpId, [
      'status' => $response->status(),
      'ok' => $response->ok(),
    ]);
  } catch (\Throwable $exception) {
    $contextStore->completeHttpCall($httpId, [
      'status' => 0,
      'error' => $exception->getMessage(),
    ]);

    throw $exception;
  }
}
bash
php artisan vendor:publish --provider="Michael4d45\\ContextLogging\\ContextLoggingServiceProvider" --tag=config