.NET - Classe de Log



Documents pareils
Paginer les données côté serveur, mettre en cache côté client

Rafraichissement conditionné d'une page en.net

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

La double authentification dans SharePoint 2007

Création d'un site web avec identification NT

Host Integration Server 2000

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Compte-rendu de projet de Système de gestion de base de données

Sauvegarde des bases SQL Express

Le stockage local de données en HTML5

Chapitre 10. Les interfaces Comparable et Comparator 1

Connaître la version de SharePoint installée

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Recherche dans un tableau

Reporting Services - Administration

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Chapitre 5 : Les procédures stockées PL/SQL

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Gestion du cache dans les applications ASP.NET

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Programmer en JAVA. par Tama

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

1 TD 2 : Construction d'une chier Acrobat et envoi par

Rapport de Mini-Projet en ArcGIS Engine

TD3: tableaux avancées, première classe et chaînes

Créer un rapport pour Reporting Services

Convers3 Documentation version Par Eric DAVID : vtopo@free.fr

Dans l'article précédent, vous avez appris

Application de lecture de carte SESAM-Vitale Jeebop

Déploiement d'une base SQL Express

Les Utilisateurs dans SharePoint

Programmation Objet - Cours II

Tp 1 correction. Structures de données (IF2)

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Microsoft Application Center Test

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Encryptions, compression et partitionnement des données

Création d objet imbriqué sous PowerShell.

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Stockage du fichier dans une table mysql:

Plateforme PAYZEN. Définition de Web-services

Génie Logiciel avec Ada. 4 février 2013

TP JAVASCRIPT OMI4 TP5 SRC

Algorithmique & programmation

Premiers Pas en Programmation Objet : les Classes et les Objets

Hébergement et configuration de services WCF. Version 1.0

Un ordonnanceur stupide

Cours Informatique Master STEP

Arbres binaires de recherche

Définition des Webservices Ordre de paiement par . Version 1.0

Visual Basic for Applications

SQL Server et Active Directory

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Programmation par les Objets en Java

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Déploiement et monitoring

I. Introduction aux fonctions : les fonctions standards

Corrigés des premiers exercices sur les classes

Programmation en Java IUT GEII (MC-II1) 1

Formulaire pour envoyer un mail

Utilisation d objets : String et ArrayList

Module http MMS AllMySMS.com Manuel d intégration

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

2. Comprendre les définitions de classes

Le langage procédural PL-PGSQL

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

Aspects techniques : guide d interfaçage SSO

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Guide de l'utilisateur

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Formation VBA 3 Interagir

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Comment développer et intégrer un module à PhpMyLab?

Guide d'installation sous Windows

Introduction à MATLAB R

Gestion distribuée (par sockets) de banque en Java

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Application 1- VBA : Test de comportements d'investissements

Module d anonymisation

Services Windows et Domaines d application

Chapitre 2 Devine mon nombre!

Client windows Nagios Event Log

Bernard HAMM, Évelyne LAVOISIER

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Documentation CAS à destination des éditeurs

Langage Java. Classe de première SI

Cours Bases de données 2ème année IUT

Transcription:

.NET - Classe de Log Classe permettant de Logger des données Text Dans tous les projets, il est indispensable de pouvoir stocker de l'information textuelle : Pour le suivi des erreurs Pour le suivi de l'activité De ce fait, voici un petit exemple rapide de la méthode pour réaliser un tel outil. Classe Simple de Log des Evènements Introduction Dans le même esprit que l'exemple précédent :.NET - Classe de cryptage simple (FR) Voila un petit exemple qui m'est très utile dans de nombreux projets. Je vais donc le présenter ici en expliquant le but de cette classe et ses différents moyens de fonctionnement. Ainsi dans toute application (surtout dans les applications WEB), il faut pouvoir suivre différentes actions des utilisateurs afin de comprendre plus facilement les raisons d'une erreur ou d'un mauvais fonctionnement. Il y a bien d'autres objectifs possibles comme créer un petit outil de statistiques, et bien d'autre encore. Tout ceci peut se faire par une écriture dans un fichier de type texte de toutes les informations qui nous sembleraient intéressantes à noter. Par exemple, le cheminement avant une erreur probable (on connaît tous en général les points sensibles de nos applications). L'utilisation à outrance des Catch permet de capter ces erreurs afin de les enregistrer par exemple. Je vous invite d'ailleurs pour ceux qui ne connaissent pas encore ce système de lire l'article suivant de notre ami Rédo : ASP.Net : - Catch - (FR) Voyons au préalable les pré requis à respecter avant de commencer. Dans le cas d'un site WEB : Il faut que le compte ASPNET (ou du moins celui qui exécute ASPWP.EXE) ait les droits de création et de modification sur le fichier que l'on va utiliser pour stocker les évènements. Dans le cas d'une application Windows Form : Il faut que le compte utilisé pour lancer l'application ait les droits nécessaires à créer et modifier le fichier que l'on souhaite. La Classe de Log

Cette classe a pour objectif de créer un fichier (s'il n'existe pas déjà) et de le peupler par du texte que le programme appelant lui fournit. On peut aussi l'utiliser pour stocker les mêmes informations dans l'event Viewer de Windows. Maintenant voyons la classe de Log : '************************************************** ' $Archive: $ ' $Author: $ ' $Date: $ $Revision: $ ' Description : Classe de Gestion des Logs lors de l'exécution des Programmes ' ************************************************** Imports System.IO Public Class LogGenerator Private _NomFichier As String Private _NomApplication As String Private Const DEFAULT_NOM_APPLICATION As String = "TextLogGenerator" #Region "Liste des Propriétés Publiques" Property NomFichier() As String Get NomFichier = RenvoieCheminFichier() End Get Set(ByVal Value As String) _NomFichier = Value End Set End Property Property NomApplication() As String Get NomApplication = _NomApplication End Get Set(ByVal Value As String) _NomApplication = Value End Set End Property #End Region Public Sub New() ' Constructeur par défaut de la Classe _NomFichier = "Logging.txt" _NomApplication = "Logger" Public Sub New(ByVal NomApplicationDonne As String, ByVal NomFichierLogDonne As String) ' Constructeur par défaut de la Classe _NomFichier = Trim(NomFichierLogDonne) _NomApplication = Trim(NomApplic ationdonne) Private Function RenvoieCheminFichier() As String ' Renvoie en résultat le chemin complet du fichier Dim TempDefault As String Dim TempNomFichier As String Dim TempPath As String Dim TempDirectory As String TempPath = Environment.CurrentDirectory If Right(TempPath, 1) <> "\" Then TempPath = TempPath & "\" TempDefault = TempPath & "Log.txt" If _NomFichier = "" Then Return TempDefault Exit Function If Not File.Exists(_NomFichier) Then Dim TempInfo As New FileInfo(_NomFichier) TempDirectory = TempInfo.DirectoryName If Not Directory.Exists(TempDirectory) Then TempNomFichier = TempDefault

Else TempNomFichier = _NomFichier Catch Ex As Exception TempNomFichier = TempDefault End Else TempNomFichier = _NomFichier Return TempNomFichier End Function Public Sub Log(ByVal TexteALogger As String) ' Enregistrement du texte fourni dans le fichier Log, s'il n'existe pas il le crée, ' sinon il écrit en fin de fichier Dim TempNomFichier As String Dim objwriter As StreamWriter TempNomFichier = RenvoieCheminFichier() If Not File.Exists(TempNomFichier) Then objwriter = File.CreateText(TempNomFichier) Else objwriter = File.AppendText(TempNomFichier) objwriter.writeline(textealogger) objwriter.close() Catch Ex As Exception Err.Raise(Err.Number,, Ex.Message) End Public Function WriteToEventLog(ByVal Entry As String, _ Optional ByVal EventType As EventLogEntryType = EventLogEntryType.Information) _ As Boolean ' Ajoute les message donnés directement dans l'event Log de Windows Dim TempNomSource As String Dim objeventlog As New EventLog TempNomSource = IIf(Trim(_NomApplication) = "", DEFAULT_NOM_APPLICATION, _NomApplication).ToString 'Enregistre le message transmis dans l'event Log en créant un nouveau bloc avec le nom de l'application ' s'il n'existe pas encore If Not objeventlog.sourceexists(tempnomsource) Then objeventlog.createeventsource(tempnomsource, "Application") objeventlog.source = TempNomSource objeventlog.writeentry(entry, EventType) Return True Catch Return False End End Function Public Sub LogError(ByVal Ex As Exception, Optional ByVal NomProcedure As String = "") ' Log Automatiquement les erreur transmises Dim TempAns As String TempAns = "Exception " & Ex.Message & " survenue" If NomProcedure <> "" Then TempAns = TempAns & " in " & NomProcedure TempAns = TempAns & " [" & Now.ToLongDateString & "]" Log(TempAns) Public Sub Reset() ' Efface le Fichier s'il existe déja Dim sfilename As String sfilename = RenvoieCheminFichier() File.Delete(sFileName) Catch End End Class Nous voyons donc dans cette classe deux propriétés :

NomFichier NomApplication Elles permettent de fournir (ou de récupérer) à la classe les valeurs que l'on souhaite avoir. Ces renseignements ne sont pas obligatoires car des valeurs sont fournies par défaut. Nous avons ensuite deux constructeurs (new), le premier est le constructeur par défaut qui initialise les valeurs des variables privées, le second est le constructeurs "enrichi" qui va prendre les valeurs transmises. Nous trouvons alors une fonction (RenvoieCheminFichier) permettant de renvoyer à tout moment le chemin physique du fichier de Log que l'on a défini. On trouve maintenant les parties permettant de stocker les informations voulues dans le médium choisi : Log : Permet d'enregistrer à la fin du fichier texte paramétré le texte transmis en paramètre. WriteToEventLog : Permet d'enregistrer dans le journal des évènements de Windows le texte transmis en paramètre (renvoie un booléen). LogError : Permet d'enregistre à la fin du fichier texte paramétré l'exception fournie avec le nom de la fonction fourni. On trouve à la fin de la classe une procédure (Reset) de réinitialisation pour vider le fichier de Log. Maintenant que nous avons la classe, comment peut-on l'utiliser? Utilisation de cette Classe Nous allons voir des exemples simples que vous pourrez adapter complètement à votre convenance. Tout d'abord voyons un cas pour une gestion d'erreur. En effet, on souhaite avoir dans notre exemple un fichier de Log à la racine du C:\ qui contiendra toutes les erreurs rencontrées dans la fonction que l'on veut surveiller. On va donc déjà définir notre fichier de log dans l'entête de notre classe courante : Private FichierLog As String = "C:\MonFichierDeLog.log" Ensuite, dans le cours de notre classe, au niveau de notre fonction (ou procédure) que l'on souhaite surveiller, on va bien sur utiliser un, Catch comme ceci : Private Sub toto ' Utilisation d'une string pour son propre message (non obligatoire) Dim MaChaine as string = string.empty MaChaine = "Erreur dans la Sub toto") MaChaine &= " Message complet : "& ex.message.tostring) MaChaine &= " Date : " & Date.Now.ToString") ' Passage de la chaine à l'ojet pour enregistrement MonLog.Log(MaChaine) On peut aussi passer directement le contenu de l'exception à l'objet comme ceci :

Private Sub toto MonLog.LogError(ex, "toto") Enfin si on souhaite sauver le contenu du texte dans le journal des évènements, il suffit de faire comme ceci : Private Sub toto ' Utilisation d'une string pour son propre message (non obligatoire) Dim MaChaine as string = string.empty MaChaine = "Erreur dans la Sub toto") MaChaine &= " Message complet : "& ex.message.tostring) MaChaine &= " Date : " & Date.Now.ToString") ' Passage de la chaine à l'ojet pour enregistrement dans le bloc des erreurs MonLog.WriteToEventLog(MaChaine, EventLogEntryType.Error) MonLog.Log(MaChaine) Conclusion Cette classe (tout comme l'exemple du cryptage) est très simple à mettre en place et rapide à comprendre. Vous pouvez la personnaliser en ajoutant par exemple un module d'envoie de mail en cas d'erreur. De nombreux exemples existent sur Internet, en voici quelques exemples : Gérer TOUTES les exceptions (ou presque) (FR) Simple XML based Error Log (US) Create Simple Error Log Files using ASP.NET and C# (US) Error Handling: Catching errors in ASP.net & C# (Part 1) (US) Error Handling: Catching errors in ASP.net & C# (Part 2) (US) Error Handling: Catching errors in ASP.net & C# (Part 3) (US) Web Application Error Handling in ASP.NET (US) Facilitez le diagnostique de vos applications (Partie 1) (FR) En vous souhaitant de bons projets de développement. Romelard Fabrice (alias F )