HORM Logger est un package Laravel conçu pour capturer prĂ©cisĂ©ment toutes les requĂȘtes HTTP entrantes et sortantes de vos applications. Il s'intĂšgre parfaitement avec la plateforme HORM pour un monitoring complet de vos communications HTTP.
- â
RequĂȘtes Sortantes : Capture automatique de toutes les requĂȘtes via
Http::facade - â RequĂȘtes Entrantes : Monitoring via middleware des requĂȘtes reçues
- â Gestion des Ăchecs : Logging des tentatives de connexion Ă©chouĂ©es
- â DonnĂ©es ComplĂštes : Headers, payload, temps de rĂ©ponse, codes de statut
- đŠ Headers complets (requĂȘte et rĂ©ponse)
- đŸ Contenu intĂ©gral des requĂȘtes et rĂ©ponses stockĂ© en JSON
- đ Timestamps prĂ©cis pour chaque transaction
- đ Direction : distinction entrante/sortante
- đ·ïž Type de requĂȘte : classification automatique (response, request_failed, connection_failed)
- â±ïž Temps de rĂ©ponse et mĂ©triques de performance
Note: Les URL, méthodes HTTP et codes de statut sont extraits directement des données JSON de request/response pour éviter la redondance.
composer require ncoo-dev/horm-logger# Publier la configuration
php artisan vendor:publish --provider="NcooDev\HormLogger\HormLoggerServiceProvider" --tag=horm-logger-config
# Publier les migrations
php artisan vendor:publish --provider="NcooDev\HormLogger\HormLoggerServiceProvider" --tag=horm-logger-migrations
# Ou utiliser la commande d'installation complĂšte
php artisan horm:installphp artisan migrateLe package fonctionne directement aprĂšs installation. Les requĂȘtes HTTP sortantes sont automatiquement capturĂ©es.
Créez le fichier config/horm.php pour personnaliser le comportement :
return [
// Configuration de la base de données
'database' => [
'connection' => env('HORM_DB_CONNECTION', null),
'table_name' => 'horm_entries',
],
// Configuration du modĂšle
'model' => [
'entry' => \NcooDev\HormLogger\Models\Entry::class,
'keep_history_for_days' => 2, // Rétention des logs
],
// Configuration de l'endpoint d'export
'endpoint' => [
'enabled' => env('HORM_ENDPOINT_ENABLED', true),
'secret' => env('HORM_ENDPOINT_SECRET', 'my-little-secret-with-horm'),
'url' => env('HORM_ENDPOINT_URL', 'horm-logger-get-entries'),
],
];Ajoutez Ă votre fichier .env :
# Configuration HORM Logger
HORM_DB_CONNECTION=mysql
HORM_ENDPOINT_ENABLED=true
HORM_ENDPOINT_SECRET=votre-secret-securise
HORM_ENDPOINT_URL=horm-logger-get-entriesLes requĂȘtes HTTP sortantes sont automatiquement capturĂ©es :
// Ces requĂȘtes seront automatiquement loggĂ©es
Http::get('https://api.example.com/users');
Http::post('https://api.example.com/orders', ['data' => 'value']);
Http::withHeaders(['Authorization' => 'Bearer token'])->get('https://api.example.com/secure');Pour capturer les requĂȘtes entrantes, ajoutez le middleware aux routes :
// Dans vos routes (web.php ou api.php)
Route::middleware(['horm.save-log'])->group(function () {
Route::get('/api/users', [UserController::class, 'index']);
Route::post('/api/orders', [OrderController::class, 'store']);
});
// Ou sur une route spécifique
Route::get('/api/monitored-endpoint', [Controller::class, 'method'])
->middleware('horm.save-log');Le package classe automatiquement les requĂȘtes :
- â RESPONSE : RequĂȘtes rĂ©ussies (status < 400)
- â REQUEST_FAILED : Erreurs HTTP (status >= 400)
- đ CONNECTION_FAILED : Ăchecs de connexion rĂ©seau
Configurez le nettoyage automatique des logs dans app/Console/Kernel.php :
protected function schedule(Schedule $schedule)
{
// Nettoie les logs de plus de 2 jours (configurable)
$schedule->command('horm:prune')->daily();
}Modifiez la durée de rétention dans la configuration :
'model' => [
'keep_history_for_days' => 7, // Garder 7 jours
],Le package expose automatiquement un endpoint sécurisé pour l'export des données vers la plateforme HORM :
GET /horm-logger-get-entries?from=2024-01-01&to=2024-01-31
Headers: horm-check-secret: votre-secret-securise
- Authentification : Header
horm-check-secretrequis - Limitation : Maximum 1000 entrĂ©es par requĂȘte
- Filtrage : Par plage de dates via paramĂštres
frometto
CREATE TABLE horm_entries (
id VARCHAR(36) PRIMARY KEY,
direction ENUM('incoming', 'outgoing'),
type ENUM('response', 'connection_failed', 'request_failed'),
request LONGTEXT, -- DonnĂ©es de requĂȘte en JSON
response LONGTEXT, -- Données de réponse en JSON
created_at TIMESTAMP,
updated_at TIMESTAMP
);Note: Les données sont stockées en JSON non-sérialisé. Les informations comme l'URL, la méthode et le code de statut sont directement accessibles dans les champs JSON request et response.
{
"data": [
{
"id": "uuid",
"direction": "outgoing",
"type": "response",
"request": {
"headers": {"Accept": "application/json"},
"method": "GET",
"url": "https://api.example.com/users",
"body": null
},
"response": {
"headers": {"Content-Type": "application/json"},
"status": 200,
"body": {"users": []}
},
"created_at": "2024-01-01T10:00:00Z"
}
]
}- DonnĂ©es Sensibles : Le package capture et stocke l'intĂ©gralitĂ© des requĂȘtes/rĂ©ponses
- Headers d'Authentification : Peuvent contenir des tokens d'accĂšs
- Recommandation : Utilisez une base de données dédiée avec chiffrement
- Impact Minimal : Event listeners non-bloquants pour les requĂȘtes sortantes
- Middleware : LĂ©ger impact sur les requĂȘtes entrantes
- Stockage : Prévoyez l'espace disque nécessaire (données JSON)
- RGPD : Attention aux données personnelles capturées
- Rétention : Configurez la durée de conservation appropriée
- Audit : Logs disponibles pour audit de sécurité
composer testConsultez CHANGELOG pour voir les derniĂšres modifications.
Pour contribuer au projet, consultez le guide de CONTRIBUTING.
Consultez notre politique de sécurité pour signaler des vulnérabilités.
MIT License - voir le fichier LICENSE pour plus d'informations.