betrieb: Logs je Thema in Tagesdateien (billing, ki, monitoring, market); Doku: Duplicate-Content-Decision durch Anhang 2 abgelöst
- config/logging.php: Themen-Channels billing, ki, monitoring, market als daily-Dateien mit gemeinsamer Aufbewahrung (LOG_DAILY_DAYS), Stack-Default auf daily; Channel `testing` für die Suite. - Fachliche Log-Aufrufe in Billing, KI-Jobs, OperationalAlert und Kursdaten auf Log::channel() umgestellt. - phpunit.xml + TestCase: Suite schreibt ausschließlich nach testing-YYYY-MM-DD.log; LogChannelsTest sichert die Konfiguration. - docs/weiteres: Decision-Update Duplicate-Content entfernt (überholt durch Roadmap-Anhang 2), Decision-Update Verlinkung & Backlinks als Referenz wieder abgelegt, README-Index nachgezogen. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
b8c6af5f10
commit
2ec61697b0
21 changed files with 338 additions and 107 deletions
69
tests/Feature/LogChannelsTest.php
Normal file
69
tests/Feature/LogChannelsTest.php
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
<?php
|
||||
|
||||
use App\Services\Web\MarketDataService;
|
||||
use App\Support\OperationalAlert;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/**
|
||||
* Log-Aufteilung: je Thema eine Tagesdatei, das allgemeine Log bleibt für
|
||||
* Exceptions und Unzugeordnetes. Die Suite selbst schreibt nur nach
|
||||
* testing-*.log (phpunit.xml + TestCase::setUp).
|
||||
*/
|
||||
test('every topic channel writes its own daily file with the shared retention', function (string $channel, string $file) {
|
||||
// TestCase biegt die Themen-Channels für die Suite um — hier zählt die
|
||||
// ausgelieferte Konfiguration aus config/logging.php.
|
||||
$config = require base_path('config/logging.php');
|
||||
|
||||
expect($config['channels'][$channel])
|
||||
->toMatchArray([
|
||||
'driver' => 'daily',
|
||||
'path' => storage_path("logs/{$file}.log"),
|
||||
'days' => 14,
|
||||
]);
|
||||
})->with([
|
||||
'billing' => ['billing', 'billing'],
|
||||
'ki' => ['ki', 'ki'],
|
||||
'monitoring' => ['monitoring', 'monitoring'],
|
||||
'market' => ['market', 'market'],
|
||||
'admin_slow' => ['admin_slow', 'admin-slow'],
|
||||
]);
|
||||
|
||||
test('the default stack rotates daily instead of growing one single file', function () {
|
||||
$config = require base_path('config/logging.php');
|
||||
|
||||
expect($config['channels']['stack']['channels'])->toBe(['daily'])
|
||||
->and($config['channels']['daily']['path'])->toBe(storage_path('logs/laravel.log'));
|
||||
});
|
||||
|
||||
test('the test suite logs into the dedicated testing channel only', function () {
|
||||
expect(config('logging.default'))->toBe('testing')
|
||||
->and(config('logging.channels.testing.path'))->toBe(storage_path('logs/testing.log'));
|
||||
|
||||
foreach (['billing', 'ki', 'monitoring', 'market'] as $channel) {
|
||||
expect(config("logging.channels.{$channel}.path"))->toBe(storage_path('logs/testing.log'));
|
||||
}
|
||||
});
|
||||
|
||||
test('operational alerts go to the monitoring channel', function () {
|
||||
config()->set('monitoring.alerts.enabled', false);
|
||||
$monitoringLog = Mockery::spy(LoggerInterface::class);
|
||||
Log::shouldReceive('channel')->once()->with('monitoring')->andReturn($monitoringLog);
|
||||
|
||||
OperationalAlert::send('Bounce-Postfach konnte nicht gelesen werden');
|
||||
|
||||
$monitoringLog->shouldHaveReceived('critical')
|
||||
->withArgs(fn (string $message): bool => str_contains($message, 'Bounce-Postfach'))
|
||||
->once();
|
||||
});
|
||||
|
||||
test('market data failures go to the market channel', function () {
|
||||
Http::fake(['*' => Http::response('', 500)]);
|
||||
$marketLog = Mockery::spy(LoggerInterface::class);
|
||||
Log::shouldReceive('channel')->with('market')->andReturn($marketLog);
|
||||
|
||||
app(MarketDataService::class)->refresh();
|
||||
|
||||
$marketLog->shouldHaveReceived('warning')->atLeast()->once();
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue