Search Logs
Lecture en temps réel, recherche et filtrage des journaux du serveur, y compris les archives pivotées et gzippées.
Version 1.0.3 · Incluse au noyau · requiert PHP 7.4+ Lire, rechercher et filtrer les journaux du serveur en temps réel.
Search Logs est une visionneuse de journaux en temps réel pour tout le serveur : choisissez l'un des 37 journaux préconfigurés (Apache, cPanel, Exim, MySQL/MariaDB, système, …), lisez-le en direct, filtrez-le avec un ou deux termes de recherche, et — en mode deep search — fouillez les archives pivotées et gzippées. Vous pouvez masquer les défauts inutilisés et ajouter vos propres chemins de journaux.
Une tuile de recherche rapide sur le tableau de bord permet de lancer une recherche sans entrer dans le module.
Onglet Search

Barre d'outils
| Contrôle | Comportement |
|---|---|
| Log file | Liste déroulante de chaque journal configuré qui existe réellement sur le disque, avec son chemin et sa taille courante. |
| Search | Filtre principal — correspondance de sous-chaîne insensible à la casse (pas de regex), max 256 caractères. Les correspondances sont surlignées dans la sortie. Anti-rebond à la frappe. |
| Narrow | Second filtre optionnel — une ligne doit contenir les deux termes (le terme « narrow » est sensible à la casse). Idéal pour error + un domaine précis. |
| Deep search off/ON | Off (défaut) : seul le fichier vivant est cherché. ON : toute la famille de rotation est parcourue — access_log, access_log.1, access_log.2.gz, … (jusqu'à 30 fichiers), en décompressant les archives .gz à la volée. Plus lourd — sollicite le CPU. |
| Refresh now | Récupération immédiate. |
| Pause / Resume (5s) | Le rafraîchissement automatique tire de nouvelles lignes toutes les 5 secondes ; mettez en pause pendant la lecture. |
La visionneuse
Un panneau de type terminal (fond sombre, 500 px, défilable) :
- Défilement infini — défiler vers le haut charge les lignes plus anciennes ; le bas charge les plus récentes. Jusqu'à 2 000 lignes sont conservées dans le DOM (les plus anciennes sont rognées automatiquement).
- Badge « N new lines ↓ » — apparaît quand du nouveau contenu arrive pendant que vous êtes défilé vers le haut.
- Les lignes de plus de 1 Mio sont tronquées avec un marqueur
[truncated]; tout le contenu est échappé HTML.
Limites de recherche (et ce que signifie l'avertissement)
Pour protéger le serveur, une recherche s'arrête après avoir analysé 16 Mio de données (fichier unique) ou 64 Mio (deep search sur toute la famille). Quand le plafond est atteint, vous verrez « Deep search scan limit reached … Refine the filter to dig further. » — rendez le terme de recherche plus précis et relancez.
Onglet Configuration

Journaux par défaut
Les 37 entrées livrées, chacune avec nom, chemin, Status (OK = le fichier existe, missing = absent de ce serveur) et Visibility. Utilisez Hide / Show pour désencombrer la liste sans rien supprimer — les défauts masqués survivent aux mises à jour et peuvent être restaurés à tout moment.
La couverture livrée inclut :
| Famille | Journaux |
|---|---|
| Serveurs web | Apache error / access / audit ModSecurity / suPHP · Nginx error / access |
| Courriel | Exim main / panic / reject · maillog (IMAP/POP) |
| Bases de données | MariaDB · MySQL error · MySQL slow query (+ auto-découverte, ci-dessous) |
| cPanel | error, access, stats, license, login, panic, queueprocd, accounting, journaux de dernière sauvegarde et transporteur |
| Système | messages, secure, cron, boot, dmesg, auditd/SELinux, chkservd, lfd, dnf, yum |
| Autre | BIND (named.run), WSA |
Certaines entrées sont des globs (ex. cpbackup/*.log) — le fichier correspondant le plus récent est utilisé.
Auto-découverte MySQL : l'extension demande aussi au MySQL/MariaDB local (SHOW VARIABLES) où se trouvent réellement ses journaux error / slow-query / general, et ajoute ces entrées automatiquement (badgées auto ; résultat mis en cache 10 minutes ; sautées silencieusement si MySQL est injoignable).
Journaux personnalisés
Ajoutez n'importe quel fichier du serveur :
| Champ | Règles |
|---|---|
| Display name | Requis, max 100 caractères. |
| Absolute path | Requis, doit commencer par /, max 500 caractères, aucun segment .. ni caractère glob. |
Les entrées personnalisées peuvent être éditées en ligne ou supprimées (avec confirmation), et sont stockées dans config/logs.user.json — préservées aux mises à jour de l'extension.
Comment il lit les journaux (exécution)
- La navigation est par curseur sur décalage d'octets — la pagination reste stable même quand le fichier grossit, et survit à la rotation des journaux.
- Les fichiers sont lus par blocs de 64 Kio, à rebours depuis la fin pour le tail/la recherche.
- Support gzip : les archives sont détectées par leurs octets magiques et décompressées en mémoire (≤ 50 Mio) ou dans un fichier temporaire (plus gros), de façon transparente.
- Tout est appliqué côté serveur : tailles de blocs (500 lignes par défaut, 2 000 max par requête), plafonds d'analyse, liste blanche de chemins (seuls les journaux configurés peuvent être lus).
Carte des données et fichiers
| Chemin | Rôle |
|---|---|
extensions/search-logs/config/logs.default.json |
Les 37 définitions de journaux livrées (écrasées à la mise à jour) |
extensions/search-logs/config/logs.user.json |
Vos ajouts + défauts masqués (préservés, 0600) |
extensions/search-logs/var/mysql-log-paths.cache.json |
Cache d'auto-découverte MySQL (TTL 10 min) |