La journalisation complète trace de la pile avec Monolog
- Je utiliser Monolog comme une bibliothèque autonome dans mon application et j'ai récemment rencontré un problème. Disons que, à un certain moment dans mon application, j'ai attraper une exception et je veux l'enregistrer:
$mylogger->error('Exception caught', array('exception' => $exception));
Cela fonctionne parfaitement sauf une petite chose - ce n'est pas journal de toute trace de la pile. Est-il possible de se connecter à l'exception de la pile trace à l'aide de monolog construire-dans le formatage?
Vous devez vous connecter pour publier un commentaire.
En fait depuis la version
1.12.0
il est possible d'inclure stacktrace à votre fichier de log: il y a une nouvelle méthode deLineFormatter
appeléincludeStacktraces
.Pour l'utiliser, vous avez besoin de remplacer le comportement par défaut de monolog formateur:
config.yml
services.yml
Vérifier github pour plus d'info:
Pull request
J'ai une solution très simple!!!
Non, Vous ne pouvez pas enregistrer la trace de la pile en utilisant le haut-formateurs. Voir ma question ici.
Si vous jetez un oeil à
LineFormatter.php
vous voyez que lenormalizeException
méthode est responsable de l'accaparement l'exception des données. Donc, j'ai dû créer un nouveau module de formatage qui s'étendaitLineFormatter
. Voici le code:Et j'ai initialisé mon enregistreur comme suit:
Cela permettra d'imprimer vos trace de la pile.
Ajoutant à Tomasz Madeyski réponse, c'est comment vous pouvez l'utiliser via le code seulement:
C'est de cette façon que je le fais, oui, des années plus tard...
$mylogger->error('Exception caught', $exception->getTrace());
depuis getTrace() retourne un tableau, qui est ce que Monolog veut.
GelfMessage::setAdditional()
getTraceAsString vous donnera la Trace de la Pile de tableau comme une "Fin de Ligne" chaîne délimitée. Exploser sur PHP_EOL et puis foreach dans le tableau d'enregistrement chaque élément. Espérons que cette aide.
Devrait produire quelque chose comme ceci:
Si vous souhaitez vous connecter stacktrace seulement lorsque l'Exception est levée, vous pouvez le faire, dans le
AppServiceProvider
:Cela va ajouter de la stacktrace à
extra
colonne, qui peuvent ensuite être utilisés par LineFormatterVous pouvez simplement utiliser le fichier de configuration (Symfony Bundle) avec le "include_stacktraces" paramètre:
@voir ce commit
@voir le schéma complet (configuration)
La Upvoted réponse œuvres, mais vous n'êtes pas obligé de créer un service personnalisé pour que.
La
monolog.formatter.line
existe déjà sur Symfony 3.4 de la pile. Vous pouvez simplement ajouter un appel de méthode sur la grâce à laCompilerPassInterface
:La monolog gestionnaire ne semble pas recevoir le service par défaut, donc vous avez encore le préciser. Exemple: