Ajout de logging avec LoggableInterface
Instructions à Exécuter
IMPORTANT : Exécute ce workflow étape par étape :
Fichier cible : $ARGUMENTS
Workflow
1. Lire et analyser le fichier
- Lire le contenu du fichier PHP
- Identifier la classe principale et ses propriétés
- Vérifier si
LoggableInterfaceest déjà implémentée
2. Chercher les dépendances LoggableInterface
Pour chaque type-hint de propriété ou paramètre :
- Utiliser Grep pour chercher si la classe implémente
LoggableInterface - Noter les classes qui l'implémentent pour appeler
->toLog()dessus
3. Ajouter LoggableInterface
Si la classe n'implémente pas encore LoggableInterface :
Ajouter l'import :
use Atournayre\Contracts\Log\LoggableInterface;
Ajouter l'interface à la déclaration de classe :
final class NomClasse implements LoggableInterface
Ajouter la méthode toLog() :
/**
* @return array<string, mixed>
*/
public function toLog(): array
{
return [
// Propriétés clés de l'objet
];
}
4. Règles pour le contenu de toLog()
Propriétés à inclure :
id(si présent)- Identifiants métier (email, code, référence...)
- États/statuts importants
- Dates clés (createdAt, updatedAt...)
Propriétés à exclure :
- Mots de passe, tokens, secrets
- Données personnelles sensibles
- Propriétés volumineuses (blobs, textes longs)
Pour les objets imbriqués :
- Si l'objet implémente
LoggableInterface:'relation' => $this->relation->toLog() - Sinon :
'relationId' => $this->relation->getId()ou ignorer
Pour les collections :
/**
* @return array{count: int, items: array<int, array<string, mixed>>}
*/
public function toLog(): array
{
return [
'count' => $this->count(),
'items' => array_map(fn ($item) => $item->toLog(), $this->items),
];
}
5. Vérification PHPStan
- Toujours ajouter
@return array<string, mixed>sur la méthode - Pour les collections : utiliser le type array shape approprié
Exemple de résultat
use Atournayre\Contracts\Log\LoggableInterface;
final class Commande implements LoggableInterface
{
private Uuid $id;
private string $reference;
private Client $client;
private \DateTimeImmutable $createdAt;
private string $password; // Sensible, à exclure
/**
* @return array<string, mixed>
*/
public function toLog(): array
{
return [
'id' => $this->id->toRfc4122(),
'reference' => $this->reference,
'client' => $this->client->toLog(),
'createdAt' => $this->createdAt->format('c'),
// password exclu intentionnellement
];
}
}