2009-04-06 8 views
2

Je travaille sur une application Web ASP.NET, écrite en utilisant Visual Basic, et j'essaie de retrouver un message d'erreur que je reçois. Je souhaite l'obtenir pour consigner l'exception dans un fichier (ou le journal des événements) afin que je puisse le voir, car l'erreur se produit uniquement sur le serveur de production, et non sur l'environnement de développement (donc VS isn n'est pas installé là-bas ...).Quelle est la meilleure façon de consigner des exceptions dans Visual Basic, sur une application ASP.NET?

Quelqu'un a-t-il des idées quant à la meilleure façon de procéder?

Vive

Répondre

4

Je ne sais pas si elle est une « meilleure pratique », mais la façon la plus commune utilise log4net.

+0

Vendu, en passant par log4net pour le moment. Merci –

2

Utilisez log4net ou Enterprise Library Logging. Je voudrais également ajouter un module http qui enregistre toutes les erreurs non gérées (Filtrer les erreurs 404). Lorsque vous exécutez un gestionnaire d'erreurs globales, vous souhaiterez probablement développer un moyen de savoir que vous avez déjà enregistré une erreur. Cela se produit si vous voulez enregistrer une erreur plus proche de la source de l'erreur, ce qui vous permet d'inclure plus de contexte dans ce qui s'est mal passé.

Dans mon cas, lorsque je consigne des erreurs, j'ajoute un élément à la collection de données sur une exception. Mon gestionnaire d'erreurs global inspecte alors tous les objets d'exception en vérifiant que nous n'en avons pas enregistré.

0

Messie: quand il apparaît, attrapez-le (en supposant que vous le pouvez?) Et déposez autant de données que possible sur la PAGE. Mettez-le dans un commentaire HTML afin que l'utilisateur ne puisse pas le voir. Quelque chose comme:

lblError.Text = (mettre le formaté Exception info ici);

<! - < asp: label id = lblError /> ->

Presque aussi salissant: rechercher le Trace.WriteLine des choses un peu. Vous pouvez activer le traçage dans ASP.NET, ce qui vous permet d'accéder à une page spécifique (_trace.axd?) Et d'obtenir un vidage de tous les messages pour ce chargement de page. Je ne l'ai pas vraiment utilisé, mais ça marche. Un peu moins brouillon (comme cela semble être une chose temporaire): utilisez Trace.WriteLine pour sortir des choses, et exécutez debugview (à partir de microsoft) sur le serveur, si vous avez un accès physique. Vous pouvez ensuite capturer cette sortie de débogage (l'api principale de win32 sur ceci est OutputDebugString - je pense que l'appel de .net est Debug.WriteLine)

Nicer: Log4Net. Configurez-le pour pouvoir l'utiliser n'importe où. Mettez-le sur "ERROR" la plupart du temps, mais dans ce cas, utilisez "DEBUG" jusqu'à ce que vous trouviez la solution.

Je voudrais aller pour 3, puis 4. Ou 3 maintenant, et 4 la prochaine fois que vous nettoyez un peu la base de code.

:)

0

Si vous pouvez mettre la main sur le global.asax pour le site - Ensuite, dans la section 'Application_Error' du Global.asax faire quelque chose comme ça

Dim ex As New Exception ( ex = Server.GetLastError(). GetBaseException() Dim g As Nouvelles fonctions générales ASendEmailFunction (ex.Message.ToString() & ex.Source.ToString() & ex.StackTrace.ToString())

Cela se chaque erreur de l'application et vous envoyer tous les détails - Vous devez créer ce qui vient envoie ASendEmailFunction() vous un e-mail avec le contenu

(vous pouvez le faire beaucoup mieux que cela, mais je tape ce directement dans cette case)

1

Si vous utilisez ASP.NET 2.0 ou au-dessus, la meilleure chose est de ne rien faire. Par défaut, ASP.NET Health Monitoring enregistre les exceptions dans le journal des événements de l'application. Utilisez simplement eventvwr.exe et recherchez les avertissements de "ASP.NET". Les informations qu'il enregistre sont très complètes.

Quand je dis «ne rien faire», je veux dire ne pas attraper des exceptions si vous ne faites que les enregistrer. Vous pouvez définir une page d'erreur personnalisée si vous le souhaitez, mais assurez-vous que les exceptions ne sont pas détectées au niveau supérieur.

+0

Merci pour la suggestion, cependant, j'ai besoin de plus de détails que les fournitures de la vue du journal des événements. Merci quand même –

+0

Par curiosité, que pourriez-vous de plus? Mais voir http://msdn.microsoft.com/en-us/library/bb398933.aspx, et essayer d'élever un événement Web dérivé de WebErrorEvent (voir http://msdn.microsoft.com/en-us/library/ system.web.management.weberrorevent.aspx). –

1

Surpris personne n'a mentionné Elmah encore

Elmah est spécialement construit pour l'enregistrement d'erreur avec ASP.NET, et l'une des grandes choses à ce sujet, est que vous pouvez l'ajouter à une application ASP.NET juste en abandonner la DLL dans le répertoire Bin et apporter quelques modifications au fichier web.config. Aucun changement de code n'est nécessaire.

Questions connexes