2010-04-25 10 views
1

Je maintiens un code de site Web qui va bientôt vider toutes ses erreurs et avertissements dans un fichier journal. Afin de rendre cela un peu plus pro-actif, je prévois d'analyser ce fichier journal quotidiennement, résumer les avertissements et les erreurs (c.-à-d. Compter l'occurrence de chaque spécifique et groupe par avertissement/erreur) puis l'envoyer par email aux développeurs le projet. Cela pourrait probablement être plutôt trivial avec un hachage et un peu plus de violon, je me demandais s'il y avait un module approprié sur CPAN que je pourrais utiliser pour faire cette tâche. Il s'agit soit d'un résumé des journaux d'erreurs/avertissements Perl, soit d'un résumé des fichiers texte arbitraires. Aucune suggestion?Quel module CPAN peut résumer les journaux d'erreurs Perl?

Edit:

Le site que je suis maintenant hérité dans un état où il génère 50 Mo d'avertissements par jour. Je cherche seulement un bandaid que je peux appliquer pour signaler les plus prolifiques. Log4Perl peut arriver une fois que je n'ai plus de choses critiques à corriger, mais pour l'instant ce n'est pas une option.

+0

duplication possible de http: // stackoverflow.com/questions/2707392/what-cpan-module-can-send-all-warnings-and-errors-to-a-log-file –

+4

Je pense que cette question concerne la * lecture * des logs, pas leur création. Ce n'est donc pas un doublon. – Quentin

Répondre

2

Je pense que regarder CPAN pour quelque chose d'aussi spécifique et simple que cela pourrait être exagéré. En supposant que le fichier journal au format d'erreur apache par défaut:

[Mon Apr 26 15:39:34 2010] [error] [client 69.12.220.202] syntax error at /var/www/cgi-bin/errortest.cgi line 8, near "{}" 

Voici un rapide doublure pour envoyer les erreurs triées par occurrence la plus élevée à une adresse. Facilement changé pour poster plusieurs adresses (ou faire un alias qui va à plusieurs adresses et envoyer à ce sujet.

cat LOGFILE | 
perl -ple 's/\[\w+\s\w+\s\d+\s\S+\s\d+\]\s\[[^\]]+\]\s\[[^\]]+\]\s//;' | 
sort |  # Sort errors after 
uniq -c | # Uniqify with count 
sort -rn | # Sort line counts 
mail -s "Error list" [email protected] 

Vous pouvez facilement exclure des lignes en jetant dans un -v grep quel que soit le point que vous trouverez le plus approprié. Throw It dans cron pour les rapports quotidiens, ou le mettre dans un script et ajouter à logrotate

+0

Ce n'est pas un module CPAN, mais il est suffisamment petit pour être un bon accessoire, merci beaucoup. :) – Mithaldu

1

Ce n'est pas un module CPAN, mais le site loganalysis contient des outils et des informations très utiles sur l'analyse et l'analyse des journaux.

En outre, log_analysis peut valoir la peine d'être regardé comme est implémenté en Perl.

1

Il ne va pas y avoir un module magique qui gère n'importe quel format de journal, y compris ceux que les gens ont utilisés localement, que vous pouvez lancer dessus. Y a-t-il quelque chose à propos de votre format de journal? Avez-vous une description de type printf? Cela ressemble-t-il à un format largement utilisé pour autre chose?

Si vous choisissez le format du message d'erreur, faites en sorte qu'il ressemble à un outil que vous appréciez.

Vous pouvez également utiliser quelque chose comme Log4perl. Non seulement vous pouvez spécifier n'importe quel format que vous aimez, mais vous pouvez envoyer la sortie où vous voulez. Vous pouvez même envoyer la sortie à une base de données, entièrement normalisée, de sorte que votre résumé est vraiment juste un peu de SQL.

Mise à jour

ECLAIRCIR dans un commentaire (bien que vous n'avez pas modifié votre question à préciser) que ce pour les avertissements et les erreurs émis par perl. Dans ce cas, il semble que les développeurs ont besoin d'une suite de tests appropriée pour attraper tous ces éléments. Si vous mettez des choses dans la production avec le plan d'attraper des avertissements alors, vous avez un processus cassé.

+0

Vous avez mal compris un peu. Le journal ne serait pas arbitraire. Il contiendrait simplement l'erreur de base Perl et les messages d'avertissement; un par ligne. En y réfléchissant bien que Log4Perl puisse vraiment être l'optimum, même si cela signifierait retarder toute cette affaire jusqu'à plus tard quand je pourrai trouver le temps de le mettre en place. Je cherchais vraiment quelque chose de petit, je peux y aller maintenant et courir avec. – Mithaldu

+1

Je n'ai pas mal compris: vous n'avez pas précisé ce que sont les "erreurs et avertissements". Log4perl ne prend pas beaucoup de temps à mettre en place non plus. –

+1

+1 pour Log4perl. Je l'utilise dans un environnement de production pour séparer les différents avertissements et erreurs dans des fichiers séparés dès le départ (séparés par le type d'erreur, le composant d'origine du système, etc.), où les rapports d'emails ordinaires envoient simplement ces fichiers mot pour mot. Il est beaucoup plus facile de séparer le contenu à la source, de sorte que les consommateurs en aval n'ont pas à l'analyser à nouveau et essayer de comprendre l'importance de chaque ligne. – Ether