diff --git a/ProcessMaker/Multitenancy/SwitchTenant.php b/ProcessMaker/Multitenancy/SwitchTenant.php index e85c1421f7..7c24f8ec6c 100644 --- a/ProcessMaker/Multitenancy/SwitchTenant.php +++ b/ProcessMaker/Multitenancy/SwitchTenant.php @@ -137,6 +137,14 @@ private function overrideConfigs(Application $app, IsTenant $tenant) $app->make('log')->reset(); $app->forgetInstance('log'); + // Used for setting the tenantId context when streaming logs to Loki + $app->afterResolving('log', function ($log) use ($tenant) { + $log->shareContext([ + 'tenantId' => $tenant->id, + 'appUrl' => $tenant->config['app.url'], + ]); + }); + // url() helper app(UrlGenerator::class)->useOrigin($tenant->config['app.url']); diff --git a/ProcessMaker/Providers/ProcessMakerServiceProvider.php b/ProcessMaker/Providers/ProcessMakerServiceProvider.php index 762fd6cd0b..6d8c1088a3 100644 --- a/ProcessMaker/Providers/ProcessMakerServiceProvider.php +++ b/ProcessMaker/Providers/ProcessMakerServiceProvider.php @@ -107,6 +107,8 @@ public function boot(): void $this->checkConfigCache(); + $this->shareServiceLogContext(); + // Hook after service providers boot self::$bootTime = (microtime(true) - self::$bootStart) * 1000; // Convert to milliseconds } @@ -634,4 +636,25 @@ private function checkConfigCache(): void }); } } + + /** + * Share non-tenant log context (service/replica from k8s hostname) for Loki. + */ + private function shareServiceLogContext(): void + { + $this->app->afterResolving('log', function ($log) { + $pattern = '/^(?:.*-)?([^-]+)-[^-]+-([^-]+)$/'; + $service = ''; + $replica = ''; + if (preg_match($pattern, config('app.hostname'), $matches)) { + $service = $matches[1]; + $replica = $matches[2]; + } + + $log->shareContext([ + 'service' => $service, + 'replica' => $replica, + ]); + }); + } } diff --git a/config/app.php b/config/app.php index b3c5891f98..879b1b3502 100644 --- a/config/app.php +++ b/config/app.php @@ -334,4 +334,6 @@ 'claim_timeout_minutes' => env('SCHEDULER_CLAIM_TIMEOUT_MINUTES', 5), 'bpmn_timer_overlap_minutes' => env('SCHEDULER_BPMN_TIMER_OVERLAP_MINUTES', 5), ], + + 'hostname' => env('HOSTNAME', ''), ]; diff --git a/config/logging.php b/config/logging.php index 075376e46c..e65f3d29f0 100644 --- a/config/logging.php +++ b/config/logging.php @@ -31,7 +31,10 @@ | */ - 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'deprecations' => [ + 'channel' => 'deprecations', + 'trace' => false, + ], /* |-------------------------------------------------------------------------- @@ -135,6 +138,11 @@ 'level' => 'debug', 'days' => env('DATA_SOURCE_CLEAR_LOG', 7), ], + 'deprecations' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + 'level' => 'emergency', + ], ], ];