Exploitation forestière: pourquoi et quoi? [fermé]

39

Je n'ai jamais écrit de programmes qui utilisent beaucoup la journalisation. Le plus que j'ai fait est de capturer les traces de la pile lorsque des exceptions se produisent.

Je me demandais, combien de personnes se connectent? Cela dépend-il du type d'application que vous écrivez? Trouvez-vous les journaux réellement utiles?

Winston Ewert
la source

Réponses:

24

Pour le travail que j'ai fait en grande partie des applications intégrées, la connexion dans un outil précieux. Au minimum, les erreurs doivent être consignées avec suffisamment d’informations pour indiquer la ligne de code. Ensuite, seraient les principaux points de fonction de l’application. Des choses telles que l'administrateur a accédé à la machine. Nous utilisons un système qui nous permet d'activer la journalisation plus détaillée. Ceci est généralement spécifique au développeur. Il peut être utilisé pour aider le développeur lors des tests de la fonctionnalité ou pour aider à diagnostiquer un problème client.

J'ai personnellement utilisé la journalisation dans toutes les applications que j'ai développées. Cela a toujours conduit à une meilleure compréhension du flux d'une application. Surtout quand entre les mains d'un client. Ils ne limitent jamais (rarement) leurs cas d'utilisation à ceux que vous testez.

Jeff
la source
19

Je ne pense pas que cela dépend du type d'application: la journalisation est utile dans toutes les applications (non triviales). Certes, je suppose que cela peut être plus utile dans certaines applications que dans d’autres, mais je ne pense pas que ce soit toujours inutile .

En particulier, dans le cas d’une erreur, une trace de pile vous indiquera l’état du programme au point exact de l’échec, mais vous avez très peu d’indices sur l’état juste avant l’erreur. Ces informations pourraient être très utiles pour dépister le problème, et la journalisation peut en fournir un aperçu utile. Je pense que c'est quelque chose dont tous les programmes, sauf le plus trivial, peuvent bénéficier.

Une autre utilisation de la journalisation, qui peut ne pas être utile pour tous les programmes, est l'analyse statistique. Par exemple, votre serveur Web enregistre généralement chaque demande reçue, puis de nombreux outils permettent d'analyser ces journaux et de générer des graphiques de vos heures de pointe, de vos pages les plus populaires, etc. Vous pouvez utiliser ces données pour planifier la capacité ("ai-je besoin d'un serveur plus grand?"), Etc.

Dean Harding
la source
9

La journalisation est effectuée pour deux raisons:

  1. Diagnostique
  2. Vérification

L’enregistrement des diagnostics a déjà fait l’objet de discussions et je ne reviendrai pas beaucoup plus là-dessus. Je dirais simplement que vous devriez sérieusement réfléchir à ce qui se passe s'il y a un échec de la journalisation. Vous souciez-vous suffisamment de lancer une exception via l'application ou de la gérer d'une autre manière? Ceci est un "ça dépend" mais les messages de niveau d'information de journalisation devraient probablement être ignorés.

La journalisation d'audit est une exigence métier. La journalisation d’audit capture les événements importants dans le système et représente l’intérêt de la direction et des aigles légaux. Par exemple, qui a approuvé quelque chose, qui a modifié quoi, etc. seulement légèrement intéressé par ceux-ci. Cependant, dans de nombreux cas, ce type de journalisation fait absolument partie de la transaction et doit échouer si la transaction n’est pas terminée.

Penser les deux séparément est utile pour moi non seulement parce que l’un est "facultatif" et l’autre obligatoire, mais parce que, en fonction des besoins, je devrais peut-être les appliquer séparément. Parfois, il peut s’agir de fruits, mais l’un est la pomme et l’autre orange. En règle générale, un seul cadre de journalisation peut gérer les deux.

MIA
la source
Cela ressemble à la différence entre tenir un journal et conserver des copies de vos contrats de location.
Shuhalo
8

Dans la plupart des tâches du serveur, la journalisation est cruciale, car l’administrateur n’est généralement pas présent lorsqu’il se produit, il doit donc vérifier après coup.

Mais un gars de Google m'a dit une fois que leurs processus de serveur ne se connectaient pas; au lieu de cela, ils sont «instrumentés»; cela signifie que chaque processus a des crochets ou des ports (il n'a pas précisé les mécanismes) où d'autres processus peuvent verrouiller pour demander des paramètres et des statistiques. Ce sont ces processus de surveillance qui stockent beaucoup d'éléments dans les journaux. L'avantage est que les informations qu'ils obtiennent ne sont pas "ouvrir un fichier", "écrire ceci", "extraire cela"; ils obtiennent des choses comme "45 453 fichiers ouverts", "653 clients du service X", "réponse moyenne de 344 ms pour la requête Y"

C’est certainement une approche différente, et que j’ai tendance à garder à l’esprit lorsque je garde mes systèmes, même si leur taille est légèrement inférieure.

Javier
la source
Je ne vois pas en quoi cette information peut être utile à moins que vous ne compariez avec des documents historiques. Je sais que les journaux seront énormes et répétitifs, en particulier pour des opérations réussies.
Michael Ozeryansky il y a
4

Je viens d'une application Winforms N-Tiered qui a tout enregistré.

Ce n'était pas très utile.

Bien sûr, la journalisation des exceptions est excellente; mais pourquoi les connecter à la machine du client alors que vous pouvez simplement envoyer l'exception à l'équipe de développement?

Les informations de journalisation se transforment facilement en une dépendance dont la valeur est rarement justifiée. Pour chaque situation où vous pouvez vous connecter gratuitement, il est préférable de collecter des informations ciblées et de les envoyer où vous le souhaitez.

George Stocker
la source
1
Pouvez-vous toujours leur envoyer un courrier électronique si votre application se bloque?
Pemdas
2
Et si l'e-mail est en panne?
3
Que se passe-t-il si la machine sur laquelle elle tourne n’est pas connectée à Internet?
Pemdas
2
Je ne crois pas cela, c'est pourquoi je vous ai donné du fil à retordre. En gros, vous avez dit que tous les journaux devraient être envoyés par courrier électronique à l'équipe de développement, ce qui est souvent impossible.
Pemdas
3
@Pemdas C'est simple: là où vous pouvez le faire, il est préférable de simplement tout enregistrer et de ne pas l'envoyer à personne. Les journaux ne signifient quelque chose que si quelqu'un les vérifie régulièrement, et seulement s'ils en consignent juste assez pour être utiles. Trop souvent, les développeurs enregistrent tout, sans même le regarder. Honteux, vraiment.
George Stocker
4

Capturer des informations sur les exceptions est indispensable car cela peut être très utile dans une certaine mesure. Mais parfois, les informations sur les exceptions ne suffisent pas, en particulier si l'utilisateur / le client de l'application ne peut pas signaler une erreur avec les informations appropriées.

La journalisation est-elle limitée à la capture d'informations d'erreur?

Dans mon cas (application Web), je note toujours quelle page est visitée, quand, sur quoi on clique, où se trouve l'adresse IP et le navigateur, etc. et besoin d'optimisation. je peux donc dire que je me connecte autant que possible.

Au début, je ne savais pas à quel point ce serait important. mais apparemment, cela est très utile dans beaucoup de choses (autres que le débogage):

  • comprendre le comportement de l'utilisateur
  • évaluer l'acceptation de la nouvelle fonctionnalité
  • faire la distinction entre les premiers utilisateurs, les fraudeurs et les clients potentiels

Je pense que la journalisation peut devenir plus importante si nous aimons y extraire des informations statistiques.

Anwar Chandra
la source
2

Je suis développeur dans une entreprise dont les produits sont déployés à l'étranger. Lorsqu'une équipe d'assistance intervient à propos d'une définition du problème, mes seuls outils de diagnostic sont mes fichiers journaux et une copie de la base de données du client. À l'aide de la base de données et de mon environnement de développement, j'ai la possibilité de reproduire le cas erroné, car je consigne les données entrantes dans mon module et les actions associées. Si je peux reproduire l'erreur à l'aide des données que je rassemble, je peux le corriger avec le débogage. Si je n'avais pas de fichier journal, je devrais alors dépendre de la description du client ou de l'équipe de support technique de ce qui se passe dans quel cas (ce qui risque fortement d'induire en erreur).

Deuxièmement, la journalisation me donne la possibilité de détecter les goulots d'étranglement de mon module sur le site déployé, car je consigne la date et l'heure de certaines actions et je peux ensuite voir quelle action consomme combien de temps.

En plus de cela, supposons que notre solution se compose de 6 modules et que des journaux d’erreurs apparaissent dans mes fichiers journaux concernant les délais d’expiration des bases de données. Si ces erreurs sont également consignées dans 5 des autres modules, la probabilité qu'il s'agisse d'un problème lié au serveur SQL augmente. Si cela n'est consigné que dans mon module, la probabilité que mes requêtes soient boguées augmente. Je pense que ce genre de choses sont des indicateurs utiles.

Le type de données que je vois dans mes fichiers journaux dépend de la configuration du niveau de journal. S'il s'agit d'un nouveau produit, nous définissons le niveau de journalisation sur "Tout" pour collecter autant de données que possible. Mais lorsque nous améliorons le produit, nous préférons peut-être conserver le niveau de journalisation à "Erreur" afin de consigner uniquement l'erreur, mais pas les journaux du niveau d'informations, etc.

Aslisabanci
la source
2

La journalisation est utile pour les informations que vous ne pouvez pas obtenir par d'autres programmes:

  • Capturer les traces de la pile (vous en avez une)
  • Capturez les données en cours de traitement lorsque votre application s'est bloquée. N'oubliez pas que les débogueurs aident uniquement s'ils sont présents lorsque l'incident se produit.
  • Informations de profilage. Si vous ne pouvez pas exécuter de profileur dans l'environnement de production, une journalisation complète, notamment des horodatages, peut vous aider à déterminer où le temps s'est écoulé. Même être incapable de le savoir peut vous aider à identifier qu'il se trouve en dehors de votre programme (par exemple, le démarrage de la collecte des ordures).
  • Statistiques non attendues lors de l'écriture du programme. On m'a demandé de fournir des graphiques de comportement dans le temps pour des intervalles intéressants pour d'autres raisons. Les données nécessaires pourraient être extraites des fichiers journaux avec quelques astuces grep + awk + perl ninja.

Remarque: Vous voulez au moins DEUX fichiers journaux.

  • Un au niveau DEBUG - fournissant toutes les informations dont vous pouvez imaginer avoir besoin (y compris INFO et au-dessus). Si c'est beaucoup trop, envisagez d'avoir un niveau TRACE supplémentaire.
  • Un au niveau INFO - fournissant la vue d'ensemble du système sur 10000 compteurs. Les étapes importantes vont ici.

L'INFO est toujours allumé. Le DEBUG est activé en cas de besoin.

Ecrivez le code de journalisation en prévoyant qu'un jour, vous devrez peut-être déboguer une situation où TOUT est le fichier journal que vous avez, et le faire correctement peut être la différence entre un licenciement et une promotion.

Pour un kilomètre supplémentaire, demandez à tous les appels de fonction d’ajouter leurs paramètres à n’importe quelle trace de pile, en Java avec

public void sendEmail(String sender, String recipient) {
try { 
...
} catch (Exception e) {
  throw new RuntimeException("sendEmail(sender="+sender+", recipient="+recipient+")");
}

Cette approche améliore essentiellement votre pile d'appels avec des valeurs de paramètre et peut vous permettre d'analyser la situation simplement avec le suivi de la pile et de ne pas avoir à voir les fichiers journaux.


la source
+1 pour "Ecrivez le code de journalisation en prévoyant qu'un jour, vous devrez peut-être déboguer une situation dans laquelle TOUT est votre fichier de log, et le faire correctement peut être la différence entre se faire virer et obtenir une promotion."
Marcie
1

Je recommanderais également que toutes les applications non triviales utilisent une journalisation à plusieurs niveaux.

Pour les raisons que d'autres ont mentionnées, il s'agit d'un outil précieux pour résoudre les problèmes liés à l'application.

Dans certains cas, la journalisation est essentielle, par exemple dans les applications financières et les autres domaines nécessitant des journaux d'activité, pour des raisons de sécurité, de métrique d'utilisation et d'audit.

ocodo
la source
1

Cela dépend très certainement du type de système que vous construisez.

Si vous écrivez une application de bureau autonome, telle qu'un traitement de texte, vous n'avez probablement pas besoin de journalisation.

Si vous écrivez un système intégré, vous ne pouvez pas vivre sans vous connecter. Sinon, lorsque votre appareil intégré se fige, vous ne savez pas pourquoi. Vous devez également vous connecter chaque fois que votre système implique plusieurs processus ou plusieurs machines physiques communiquant entre elles. Encore une fois, lorsque le système se bloque, vous devez savoir quelle partie de celui-ci est décédé quand et pourquoi. Vous devez pouvoir comparer les journaux pour déterminer si les données ont été transmises d’un processus à l’autre. De même, vous devez vous connecter chaque fois que votre système doit fonctionner pendant de longues périodes sans grande interaction directe de l'utilisateur.

Dima
la source
1

La journalisation est toujours utile. Mais lors de la mise en œuvre, sachez que ce n'est pas nécessairement vous qui allez lire les journaux. Peut-être est-ce une sorte d'administrateur, d'utilisateur final, de client, d'équipe de support, ...

Donc, ne vous connectez pas seulement les stacktraces, mais aussi certaines informations supplémentaires pouvant être interprétées par des non-développeurs. Lorsque votre application est gérée par d'autres groupes, il est également utile d'écrire des codes d'erreur uniques dans vos journaux. Cela pourrait faciliter le support, l'automatisation, ...

Un autre point du point de vue administrateur: pensez à la rotation des journaux.

Christian
la source