A PSR-3 context array nobody was reading

Every log call carried a context array, the log format rendered it as a string, and the aggregator indexed it as one blob.

$logger->warning('Payment declined', [
    'order_id' => $order->id,
    'gateway'  => $gateway->name(),
    'code'     => $response->code(),
]);

// what reached the aggregator
[2023-10-26 09:14:02] app.WARNING: Payment declined
  {"order_id":8814,"gateway":"stripe","code":"do_not_honor"}

// searchable as text. not filterable by code.

The context array is the useful part of PSR-3 and it only becomes useful when the formatter emits structured output and the aggregator parses it — otherwise it is a slightly tidier way of concatenating a string. Switching the handler to a JSON formatter took ten minutes; agreeing which keys are standard across the application took considerably longer and was the part that made queries possible.