2008-10-23 23 views
5

Je me demandais juste combien les gens se connectent dans leurs applications ???Combien de temps pour vous connecter à une application et combien est trop?

Je l'ai vu:

«J'aime généralement d'utiliser le niveau journal des erreurs de se connecter toutes les exceptions qui sont pris par l'application que je vais utiliser le niveau de journalisation INFO comme. » Premier niveau » schéma de débogage pour montrer chaque fois que je entrer ou de sortir d'une méthode. de là, je utilise le niveau de journalisation DEBUG pour tracer des informations détaillées. le niveau journal FATAL est utilisé pour toutes les exceptions qui je n'ai pas réussi à attraper dans mon basé sur le web applications. "

qui avait cet exemple de code avec elle:

Public Class LogSample 

    Private Shared ReadOnly Log As log4net.ILog = log4net.LogManager.GetLogger(GetType(LogSample)) 

    Public Function AddNumbers(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer 

     Dim intResults As Integer 

     Log.Info("Starting AddNumbers Method...") 
     Log.Debug("Number1 Specified: " & Number1) 
     Log.Debug("Number2 Specified: " & Number2) 

     intResults = Number1 + Number2 

     Try 

     intResults = Number1 + Number2 

     Catch ex As Exception 

     Log.Error("Error Adding Nubmers.", ex) 

     End Try 

     Log.Info("AddNumbers Method Complete.") 

     Return intResults 

    End Function 

End Class 

Mais cela semble juste ajouter beaucoup à la méthode. Par exemple, une classe qui serait normalement peut-être 7 lignes de code devient soudainement 12 lignes de code. La méthode perd également une partie de sa clarté et de sa simplicité. Mais en disant que l'avantage d'avoir la connexion en place peut être bon. Par exemple la surveillance des performances dans un système de production, chassant les bugs aberrantes dans la production (pas que vous auriez tout cela l'enregistrement sous tension tout le temps.

Par conséquent, je me demande ce que les gens font ? Vive Anthony

+0

http://stackoverflow.com/questions/163385/logging- –

Répondre

3

Vous avez raison de dire que cela rend le code plus difficile à lire et à maintenir.Une recommandation consiste à examiner un outil AOP (Aspect Oriented Programming) pour séparer votre logique d'enregistrement de votre logique d'application. dans la communauté .Net que vous voudrez peut-être rechercher

0

La journalisation en tandpoint peut être un sujet intéressant. J'ai écrit un blog entry sur CSO Online il y a quelques temps à la suite de quelques attaques DDOS. Ceci est la section où j'ai parlé de l'exploitation forestière, espérons que cela aide un peu:

Des techniques telles que la limitation du journal, écrire uniquement les journaux, et l'utilisation de serveurs de journaux peut renforcer la sécurité rétroactive d'un système. Après une possible attaque DDoS a eu lieu la société volonté sans doute vouloir enquêter sur l'attaque . Une recherche est seulement possible si le niveau correct d'enregistrement a été utilisé. Trop et les journaux seront rapidement remplis, qui pourrait être la raison pour le DoS en premier lieu. Trop peu et les journaux seront sans valeur, car ils ne contiennent pas assez d'informations à attraper le criminel.

3

C'est plus le art côté de la programmation.

Vous ne voulez pas tout enregistrer. Mais vous voudrez enregistrer les parties les plus cruciales du système.Il suffit de penser à votre programme au sens large et d'essayer d'identifier quelles informations vous voulez au cas où quelque chose casse en production. Pour commencer, tous les modules logiques de base de votre application doivent avoir une fonctionnalité de journalisation. Les parties décoratives, par ex. L'interface utilisateur/animation ne devrait pas avoir besoin de se connecter.

À mon humble avis, la journalisation de toutes les entrées/sorties de méthode est excessive et produira également un bruit d'autant plus que vous pouvez simplement intégrer une trace de pile.

Et pour les performances, utilisez un profileur .

+0

La journalisation est un profileur hors ligne Vous n'avez peut-être rien d'autre à part ça –

3

... hey, est-ce que je reçois un badge pour être cité comme sujet dans une question SO? Mais sérieusement, une chose que je tiens à clarifier à propos du commentaire de journalisation ci-dessus est qu'une partie de ma justification de la journalisation «verbeuse» est basée sur le fait que j'utilise les fonctionnalités de log4net elle-même.

Dans l'exemple fourni, cette méthode se connecte tous les jours en mode WARN. Ce qui signifie que la seule chose qui est enregistrée "par défaut" est si une exception se produit. Si je reçois un appel d'un de mes clients à propos d'une erreur dans l'application, ils n'ont pas à me lire un message énigmatique sur l'écran, je saute dans le journal et je peux voir ce qui se passe. La plupart du temps, la réponse est là. Que se passe-t-il si la réponse n'est pas facilement disponible?

Log4net me permet de mettre à jour mon fichier de configuration (pas de recompilation nécessaire, pas besoin d'avoir accès à un fichier système spécial sur le serveur web avec l'approbation de l'administrateur système) et passer en mode INFO. Maintenant, vous commencez à voir une deuxième couche de journalisation. Peut-être que le code n'a jamais atteint une certaine boucle. Peut-être que la récupération de données avait un jeu d'enregistrements vide. Ce deuxième niveau de débogage est utile, et le journal est légèrement plus grand. Une fois cela fait, je peux encore changer la configuration et revenir à la journalisation de la lumière.

Naturellement, si les choses sont vraiment fous, alors je vais au niveau de débogage complet, et je veux savoir ce que chaque variable rapporte, ce que DataRows j'ai affaire, et ce qui se passe dans l'application. À mon lieu de travail actuel, nous n'avons pas la possibilité de faire du débogage à distance dans nos applications Web, et nous ne pouvons pas toujours accéder à la base de données de production sans augmenter potentiellement les données. Je suis d'accord avec la majorité des gens là-bas que la journalisation excessive peut vraiment faire tomber une application et causer plus de problèmes que cela en vaut la peine. Si vous ne recommandez pas ce type d'enregistrement détaillé dans une application, à moins que l'application ne le justifie pour des raisons de sécurité. Cependant, être en mesure de tirer parti de la journalisation verbeux en cas de besoin et sans avoir à recompiler mon code est un énorme avantage à mon avis et si vous avez un cadre qui peut le permettre facilement (comme log4net), alors je dis obtenir agréable et verbose et il est assez facile de filtrer mentalement les références de code de journal si vous devez retourner dans le code lui-même. Je m'excuse si je parais défensif ou si je ne me trompe pas, je ne le dis pas du tout. Je voulais juste donner un peu plus d'informations sur comment et pourquoi j'ai configuré ma journalisation en utilisant log4net dans la méthode mentionnée. 8^D

+0

Hey man ... prenez-le en complément que je vous ai utilisé comme source.grand article en passant et cela m'a incité à repenser certaines choses ne le prenez pas comme une mauvaise chose – vdhant

+1

Logging est essentiellement un débogueur hors ligne où vous devez avoir préparé toutes les questions à l'avance. –

0

Au strict minimum, vous devriez enregistrer les erreurs et les appels au composant externe ... L'échantillon que vous fournissez est ce que j'appellerais TOO beaucoup de loggings ... Il n'y a aucun point de connexion que vous êtes dans un début d'une méthode, ou à la fin d'une méthode, ou même les params qui ont été passés à la méthode ... C'est un gaspillage d'espace disque, votre fichier journal deviendra très gros en un rien de temps ...

RWendi

0

Il est difficile de décider combien l'exploitation forestière est suffisant. Trop de code de journalisation dans une fonction comme dans votre exemple enterre le code logique actuel. Trop d'entrées de journal rend le journal bruyant. Mais trop peu de logs n'est pas très utile !!

Pour .NET, vous pouvez utiliser la bibliothèque AOP, PostSharp, pour vous aider à consigner l'entrée et la sortie d'une fonction ainsi que les valeurs des arguments et plus encore.

Pour vous aider à déterminer combien de se connecter votre application, consultez cet article "System Logging and Log Analysis "par Marcus Ranum.

Hope this helps.