feat : SearchLogParser accepte un pattern glob pour les logs d'accès

Balaye tous les fichiers correspondant au pattern (ex: *-access.log)
et leurs rotations .gz/.tar.gz. Valeur par défaut : *-access.log.
Label renommé en "Pattern des logs d'accès".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 00:35:19 +02:00
parent 981c9f6cb3
commit 3bb83b3ffd
3 changed files with 26 additions and 21 deletions
+22 -17
View File
@@ -11,7 +11,7 @@ class SearchLogParser
public function __construct(
string $logDir = '/var/log/apache2',
string $vhostBase = 'lan.acegrp.varlog-access.log',
string $vhostBase = '*-access.log',
string $cacheFile = '',
int $cacheTtl = 600
) {
@@ -47,8 +47,7 @@ class SearchLogParser
public function isReadable(): bool
{
$f = $this->logDir . '/' . $this->vhostBase;
return file_exists($f) && is_readable($f);
return count($this->logFiles()) > 0;
}
private function cacheValid(): bool
@@ -60,23 +59,29 @@ class SearchLogParser
/** @return list<array{path:string,type:string}> type: plain|gz|tgz */
private function logFiles(): array
{
$base = $this->logDir . '/' . $this->vhostBase;
$files = [];
$pattern = $this->logDir . '/' . $this->vhostBase;
$files = [];
if (file_exists($base) && is_readable($base)) {
$files[] = ['path' => $base, 'type' => 'plain'];
}
foreach (glob($base . '.*') ?: [] as $path) {
if (!is_readable($path)) {
// Fichiers correspondant au pattern de base (courants + rotations incluses si glob)
$bases = glob($pattern) ?: [];
// Ajouter aussi les rotations (.N, .N.gz, .N.tar.gz) pour chaque base trouvée
foreach ($bases as $base) {
// Exclure les rotations déjà capturées par le pattern glob
if (str_ends_with($base, '.gz') || preg_match('/\.\d+$/', $base)) {
continue;
}
if (str_ends_with($path, '.tar.gz')) {
$files[] = ['path' => $path, 'type' => 'tgz'];
} elseif (str_ends_with($path, '.gz')) {
$files[] = ['path' => $path, 'type' => 'gz'];
} else {
$files[] = ['path' => $path, 'type' => 'plain'];
$candidates = array_merge([$base], glob($base . '.*') ?: []);
foreach ($candidates as $path) {
if (!is_readable($path)) {
continue;
}
if (str_ends_with($path, '.tar.gz')) {
$files[] = ['path' => $path, 'type' => 'tgz'];
} elseif (str_ends_with($path, '.gz')) {
$files[] = ['path' => $path, 'type' => 'gz'];
} else {
$files[] = ['path' => $path, 'type' => 'plain'];
}
}
}
+1 -1
View File
@@ -65,7 +65,7 @@ function apacheAccessLog(): string
if ($fromSettings !== '') {
return $fromSettings;
}
return (string)($_ENV['APACHE_ACCESS_LOG'] ?? getenv('APACHE_ACCESS_LOG') ?: 'lan.acegrp.varlog-access.log');
return (string)($_ENV['APACHE_ACCESS_LOG'] ?? getenv('APACHE_ACCESS_LOG') ?: '*-access.log');
}
function saveSiteSettings(array $data): bool