2009-12-29 7 views
12

Je suis en train de construire un programme qui est un gestionnaire eBook, lecteur, organisateur et éditeur, qui est aussi un transfert eBook (à eReaders comme Kindle), mais je le développais et une question a surgi dans mon esprit: "Connectez-vous ou pas?"Se connecter ou ne pas se connecter?

Puis j'ai commencé à penser à la journalisation. Comme de nombreux programmes d'enregistrement des actions, j'ai commencé à chercher et voir comment ils se connectent les choses, alors je veux savoir:

  • Il est bon de vous connecter des actions ou des choses qui happend dans les programmes (comme des erreurs)?
  • Dans mon cas, c'est bon d'enregistrer des choses?
    • De quoi ai-je besoin pour me connecter? Quel est le meilleur moyen de consigner des choses (fichiers texte, bases de données ...)?
  • Il existe un outil pour se connecter à Lazarus?
+4

C'est du journal, c'est du journal, c'est mieux que mal, c'est bon. – Ferruccio

+1

dans le cas où quelqu'un est perdu par @Ferruccio: http://www.youtube.com/watch?v=eusMzC7Rx7M – JWiley

Répondre

22

C'est essentiel. Log

  1. toutes les erreurs avec des données connexes (args de méthode, etc.). Sinon, vous allez avoir une série de comportements liés aux bogues que vous ne pouvez pas analyser.
  2. points d'entrée et de sortie principaux (quel est votre programme faire? Faut-il appeler ces méthodes à ce point?)
  3. temps possibles méthodes/opérations consommation (entrée et sortie), de sorte que vous pouvez mesurer ce qui se passe et savoir ce que votre programme est en train de faire/où il est.
  4. où vous chargez des configurations à partir de, le cas échéant. Cela signifie que vous pouvez dire comment votre programme se configure lui-même (quelle configuration utilise-t-il?)

Si vous avez raison, vous pouvez constater que vous passez de moins en moins de temps dans le débogueur. Je voudrais err sur la journalisation plus plutôt que peu, et enlever ou filtrer si/quand cela devient un problème (comme noté ci-dessous, logging Gbs par jour est probablement contre-productif). J'ai travaillé sur de nombreux systèmes où il a été décrété que la journalisation sera refusée ou supprimée après le développement, et cela ne se produira jamais, car c'est tellement utile. Certaines personnes s'opposent à la journalisation en raison de son impact sur les performances. Si tel est le cas, supprimez-le lorsque il est connu pour être un problème, pas avant.

Vous devriez être en mesure de trouver des cadres appropriés pour la journalisation (par exemple log4c pour C, log4j pour Java) pour votre plate-forme particulière qui permettent un filtrage et une sélection de destination appropriés. Cela signifie que vous pouvez vous connecter aux fichiers (et limiter la taille des journaux), les bases de données, les moniteurs distants, etc. et modifier cette décision à la volée (via un fichier de configuration ou des arguments de ligne de commande).Le cadre correct ne doit exiger que très peu de choses au départ, sauf l'insertion des instructions de journalisation appropriées. Vous ne devriez pas avoir à écrire beaucoup sur la gestion des fichiers ou d'autres codes de gestion de journaux.

Voici un useful blog entry sur ce sujet, avec d'autres directives.

+2

"supprimé post-développement, et cela ne se produit jamais" - vous chanceux. Mes clients précédents ont largement utilisé les paramètres de journalisation. Pour un, il était nécessaire car l'ensemble de l'installation écrivait plus de 10 Go de journaux par jour. ;) Nous avons décidé que c'était trop d'informations de débogage pour l'environnement de production et lui avons donné un nouveau fichier de configuration pour ses besoins de journalisation. –

+2

Oui. J'ai * eu * la journalisation en boîte dans le passé lorsque l'achat d'une entreprise de fabrication de disques était la seule autre option :-) –

4

Dans les premières phases du développement de composants, consignez tout. Habituellement, je fais tout mon développement sur la console de cette façon, je peux voir toute ma logique en sortie ligne par ligne si besoin est. Au fur et à mesure que vous avancez, les erreurs de journalisation sont toujours un must et les valeurs de consignation après une manipulation de données complexe peuvent également être utiles. Pensez aux désastres militaires dus aux arrondis flottants bientôt.

Je recommande de vous connecter à un fichier plat sur la base de données.

+1

"Je recommande de vous connecter à un fichier plat sur la base de données." Je n'utiliserais l'une ou l'autre de ces méthodes qu'en dernier recours. STDERR et SYSLOG devraient être les premiers ports d'escale. L'utilisation d'un fichier plat peut causer beaucoup de complications lorsqu'il y a plus d'un programme essayant d'y écrire. ... et le niveau de journalisation doit être configurable lors de l'exécution (à partir d'un fichier de configuration ou d'options de démarrage). C. – symcbean

+1

Au niveau du composant individuel, cela ne devrait pas poser de problème. Plus la journalisation dans un fichier plat vous donne la possibilité de faire ctrl + f simple pour trouver des choses qui et je n'ai pas rencontré ce problème avec un simple flux de fichier étant ouvert. Les bases de données se développent astronomiquement dans la pratique. – Woot4Moo

+2

Vous n'avez pas non plus de problème avec les fichiers plats, vous devez juste vous assurer que CHAQUE application (ou instance de votre application) possède son propre fichier journal. –

2

Consignez clairement les erreurs dans les fichiers plats formatés de façon cohérente afin de pouvoir les récupérer auprès de votre client et les lire dans Excel ou un db pour analyse si nécessaire.

7

La journalisation est essentielle et utile. Pourquoi? À des fins de traçage. Tant que vous développez sur une machine locale, vous pouvez rapidement déboguer, définir des points d'arrêt et déterminer où les choses tournent mal. Une fois que vous avez ensuite déployé en production votre client vous téléphonera, en disant qu'il n'a pas vu ce qu'il attendait (un message d'erreur est apparu quelque part). Croyez-moi, vous aurez du mal à comprendre ce qui s'est passé si vous n'avez pas de journaux.

Hmm ... La réponse de Brian vient à dire essentiellement sauté où je voulais continuer :)

Quoi qu'il en soit, vous pouvez envisager aussi des techniques Aspect Oriented. Ils sont plutôt adaptés à la consignation et vous gardez votre code propre. Peut être une option pour votre projet. En ce qui concerne le type de journalisation: Je travaille généralement très bien avec des fichiers texte (avec une certaine taille maximale), sauf si vous devez garder une trace de toutes les activités de votre utilisateur (raisons légales, peu importe). Dans ce cas, un journal DB serait probablement plus approprié.

+1

Désolé, Juri! (15 caractères de remplissage) –

1

La journalisation est toujours essentielle, car des erreurs peuvent survenir en production et des informations doivent être fournies sur ce qui s'est passé. En dehors des erreurs, cependant, que vous enregistriez les points d'entrée et de sortie des touches, les méthodes/opérations qui prennent du temps, etc. dépendent de l'application et de l'environnement. Si vous n'avez pas intégré l'analyse des performances dans votre système, vous devez soit vous connecter, soit être en mesure d'activer la journalisation détaillée, afin de détecter les problèmes de performances. De même, si vous n'avez pas d'outils de débogage en temps réel, vous devez vous connecter ou être en mesure d'activer la journalisation pour les points d'entrée/sortie de clé. Si le système gère des millions de transactions, chacune avec des millions d'opérations, alors vous ne voulez pas avoir ce niveau de journalisation tout le temps sur chaque sous-système/processus, sinon votre application remplit rapidement tout l'espace disque disponible - C'est un problème.

Pour les systèmes simples et de petite taille, il est probablement suffisant d'avoir un niveau de journalisation par défaut pour la production et un niveau de débogage pour la résolution des problèmes.

+1

"Si le système gère des millions de transactions," - J'ai utilisé des fichiers journaux de roulement. Toutefois, l'utilisateur final doit en être conscient pour capturer les fichiers journaux juste après l'erreur. Mon client avait 30 à 40 minutes pour copier les fichiers journaux, avant qu'ils ne soient écrasés. Ce fut une période assez courte étant donné qu'il s'agissait d'une architecture de serveur client et d'une grande entreprise. (quelqu'un avait besoin de dire à l'administrateur de capturer les logs) –

2

Ceci est une question très générale ... Pour commencer, je dirais que vous devriez avoir plusieurs niveaux de journalisation. Au niveau de la trace, consignez tout ce que vous avez en tête. Au niveau des erreurs, ne notez que les erreurs de type sever. Permet de choisir le niveau de journalisation à l'exécution, bien que la sélection ne soit pas disponible pour les utilisateurs finaux. Aussi, gardez à l'esprit que si vous mettez vos journaux à la disposition de personnes autres que vous (votre équipe de support, par exemple), assurez-vous que vos messages sont lisibles par l'homme et pas seulement quelque chose que vous pouvez comprendre.

Il existe de nombreuses infrastructures de journalisation, regardez autour de vous pour voir ce qui convient à votre environnement de développement. Il pourrait être plus facile d'utiliser une infrastructure bien testée que d'inventer quelque chose de votre propre.

2
  • Il est bon de vous connecter des actions ou des choses qui happend dans les programmes (comme des erreurs)?

Oui, vous devez toujours avoir un moyen de trouver ce qui est erroné notre. Vous devez également les classer afin de pouvoir désactiver ultérieurement la consignation d'une certaine classe de messages de journal (par exemple, lorsque vous développez des messages de débogage, après avoir envoyé votre application, vous ne tenez compte que des erreurs et des avertissements).

  • Dans mon cas, il est bon de se connecter les choses?

voir ci-dessus.

 o What I need to log? 
  • Chaque erreur (app/fonction ne fonctionne pas)
  • Avertissement Chaque (app/fonction fonctionne toujours, mais il est utile de garder un record de celui-ci)
  • information (quelque chose agréable d'avoir)
  • Debug (choses que seul un développeur se soucie)

Avec ever class, vous devez également enregistrer les données pertinentes.

  • Quelle est la meilleure façon de connecter les choses (fichiers texte, bases de données ...)?

Je préfère les fichiers, car ils sont faciles à lire et peuvent être partagés facilement avec les autres. Mais tant que vous pouvez accéder aux journaux, le support est le plus petit problème.

Je recommande d'utiliser un cadre de journalisation, car la connexion est une partie essentielle de votre application et de nombreuses personnes ont déjà trouvé de très bonnes solutions. De cette façon, vous n'inventez pas la roue encore et encore et vous avez plus de temps pour développer votre application.

+0

L'autre avantage des différents frameworks de journalisation est que vous pouvez facilement vous abonner/filtrer les traces de différentes manières. Alors peut-être que vous voulez enregistrer * tout * dans une base de données, mais vous voulez envoyer un e-mail sur les erreurs critiques. Vous pouvez le faire. :) – GalacticCowboy

+0

Bon point que j'ai oublié de mentionner. Au lieu de déterminer comment envoyer des courriels ou écrire dans un journal système ou un serveur de journalisation central, il vous suffit de modifier la configuration de votre infrastructure. Cela vous laisse plus de temps pour développer l'application. –

+1

Un exemple concret: j'ai travaillé sur une application il y a un moment où le développeur original décidait de consigner les exceptions dans le journal des événements Windows. Ce qui était correct, jusqu'à ce que nous déployions sur un hôte qui n'autorisait pas l'accès au journal des événements, de sorte que chaque exception entraînait une exception subséquente: l'exception d'origine ne pouvait pas être consignée. Avait-il utilisé un cadre de journalisation, la configuration aurait géré cela. Comme c'était, il a fallu beaucoup de retouches ... – GalacticCowboy

1

La journalisation pendant le développement n'a pas vraiment d'importance - faites-le si cela vous aide; arrête de le faire quand il arrête d'aider.

Les bonnes bûches deviennent importantes pendant la production. Dressez la liste des problèmes que vous rencontrerez et consignez les informations dont vous avez besoin pour résoudre ces problèmes. Serez-vous poursuivi pour violation de copyright? Ensuite, connectez-vous à ce dont vous avez besoin pour vous défendre. Les gens vont-ils signaler des bugs à leurs lecteurs et demander de l'aide? Enregistrez ensuite ce dont vous avez besoin pour répondre aux questions et réduire vos coûts d'assistance.

Il est facile de consigner trop d'informations (inutiles). Si vous n'en avez pas besoin, ne le connectez pas. Les serveurs vont-ils échouer? Les réseaux vont-ils échouer? Voulez-vous manquer de stockage? Oui, et vous pouvez vous connecter pour aider à diagnostiquer ces problèmes, mais c'est principalement un travail de surveillance, pas de journalisation.

Syslog offre une très bonne gestion et un contrôle centralisé. Il existe de nombreux cadres de journalisation qui fonctionnent à peu près de la même façon: c'est vraiment la préférence personnelle que vous utilisez. J'utilise un format de journal structuré et interrogeable sur le dessus de syslog.Tous les journaux de développement ad hoc sont supprimés avant leur mise en ligne.

Questions connexes