begin process at 2013 06 19 01:11:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VB.NET

 > CRÉER DES FICHIERS DE LOG EN QUELQUES LIGNES

CRÉER DES FICHIERS DE LOG EN QUELQUES LIGNES


 Information sur la source

Note :
Aucune note
Catégorie :VB.NET Source .NET ( DotNet ) Classé sous :log, fichier, classe, file Niveau :Débutant Date de création :05/10/2006 Date de mise à jour :16/10/2006 14:57:57 Vu :20 624

Auteur : Raidwan

Ecrire un message privé
Site perso
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

Ce code est trés simple et vous permet de créer des fichiers de log trés trés facilement.

Il est facilement amèliorable selon les besoins...

On a ici la classe et un exemple d'utilisation.

Source

  • ' importatation du module E/S
  • Imports System.IO
  • Module LogMod
  • 'objet de log qui sera unique (singleton)
  • Private objLog As log4Raid
  • 'procédure qui sera appeler pour ecrire dans un fichier log (exemple)
  • Public Sub EcrireLog(ByVal type As String, ByVal texte As String)
  • If (objLog Is Nothing) Then
  • objLog = New log4Raid(Environment.CurrentDirectory + "\logs", "Log")
  • End If
  • objLog.EcrireLog(type, texte)
  • End Sub
  • 'classe de log
  • Private Class log4Raid
  • 'format de la date
  • Private date_format As String
  • 'chemin vers le dossier des logs
  • Private path As String
  • 'nom de base des fichiers de log
  • Private base_name As String
  • 'longeur max avant de changer de numéro de fichier
  • Private file_length As Long
  • Public Sub New(ByVal p_path As String, ByVal p_base_name As String, Optional ByVal p_file_length As Long = 800000, Optional ByVal p_date_format As String = "dd/MM/yyyy hh:mm:ss")
  • path = p_path
  • base_name = p_base_name
  • file_length = p_file_length
  • date_format = p_date_format
  • End Sub
  • Public Sub EcrireLog(ByVal type As String, ByVal texte As String)
  • Try
  • 'recherche du nom de fichier
  • 'liste des fichiers du repertoire
  • Dim fichiers() As String = Directory.GetFiles(path, "*.txt")
  • 'definition du nom du fichier
  • Dim nomFichier As String = ""
  • ' trie des fichiers par ordre alphabétique
  • Array.Sort(fichiers)
  • 'si on a au moins un fichiers
  • If (fichiers.Length > 0) Then
  • ' le nom du fichiers sera (temporairement) le dernier de la liste
  • nomFichier = fichiers(fichiers.Length - 1)
  • 'récupération des informations du fichier
  • Dim fi As New FileInfo(nomFichier)
  • 'si le fichier est supérieur à la taille max on remer le nom du fichier à vide
  • If (fi.Length > file_length) Then
  • nomFichier = ""
  • End If
  • End If
  • ' si le nom du fichier est vide on va créer un nouveau fichier
  • If nomFichier = "" Then
  • nomFichier = path + "\" + base_name + "_" + CStr(fichiers.Length) + ".txt"
  • End If
  • 'ouverture d'un lien vers le fichier
  • Dim LogStream As New StreamWriter(nomFichier, True, System.Text.Encoding.UTF8)
  • 'ecriture sur le fichier
  • LogStream.WriteLine(Format(Now(), date_format) + ": " + type + " : " + texte)
  • 'fermeture du lien vers le fichier
  • LogStream.Close()
  • Catch ex As Exception
  • 'erreur, impossible d'ecrire dans le fichier
  • MsgBox("Erreur d'écriture dans les fichiers LOG : " + ex.Message)
  • End Try
  • End Sub
  • End Class
  • End Module
' importatation du module E/S
Imports System.IO

Module LogMod

'objet de log qui sera unique (singleton)
Private objLog As log4Raid

    'procédure qui sera appeler pour ecrire dans un fichier log (exemple)
    Public Sub EcrireLog(ByVal type As String, ByVal texte As String)
        If (objLog Is Nothing) Then
            objLog = New log4Raid(Environment.CurrentDirectory + "\logs", "Log")
        End If
        objLog.EcrireLog(type, texte)
    End Sub



     'classe de log
    Private Class log4Raid
        'format de la date
        Private date_format As String
        'chemin vers le dossier des logs
        Private path As String
        'nom de base des fichiers de log
        Private base_name As String
        'longeur max avant de changer de numéro de fichier
        Private file_length As Long

        Public Sub New(ByVal p_path As String, ByVal p_base_name As String, Optional ByVal p_file_length As Long = 800000, Optional ByVal p_date_format As String = "dd/MM/yyyy hh:mm:ss")
            path = p_path
            base_name = p_base_name
            file_length = p_file_length
            date_format = p_date_format
        End Sub

        Public Sub EcrireLog(ByVal type As String, ByVal texte As String)
            Try
                'recherche du nom de fichier
                'liste des fichiers du repertoire
                Dim fichiers() As String = Directory.GetFiles(path, "*.txt")
                'definition du nom du fichier
                Dim nomFichier As String = ""
                ' trie des fichiers par ordre alphabétique
                Array.Sort(fichiers)
                'si on a au moins un fichiers
                If (fichiers.Length > 0) Then
                    ' le nom du fichiers sera (temporairement) le dernier de la liste
                    nomFichier = fichiers(fichiers.Length - 1)
                    'récupération des informations du fichier
                    Dim fi As New FileInfo(nomFichier)
                    'si le fichier est supérieur à la taille max on remer le nom du fichier à vide
                    If (fi.Length > file_length) Then
                        nomFichier = ""
                    End If
                End If

                ' si le nom du fichier est vide on va créer un nouveau fichier
                If nomFichier = "" Then
                    nomFichier = path + "\" + base_name + "_" + CStr(fichiers.Length) + ".txt"
                End If
                'ouverture d'un lien vers le fichier
                Dim LogStream As New StreamWriter(nomFichier, True, System.Text.Encoding.UTF8)
                'ecriture sur le fichier
                LogStream.WriteLine(Format(Now(), date_format) + ": " + type + " : " + texte)
                'fermeture du lien vers le fichier
                LogStream.Close()
            Catch ex As Exception
                'erreur, impossible d'ecrire dans le fichier
                MsgBox("Erreur d'écriture dans les fichiers LOG : " + ex.Message)
            End Try
        End Sub
    End Class
End Module



 Historique

05 octobre 2006 10:39:40 :
Mise à jour : corrections diverses
16 octobre 2006 14:43:11 :
rectification du code et commentaire
16 octobre 2006 14:57:57 :
...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) CONVERSION DE LA BASE 2 À LA BASE 10 par alpha5
Source avec Zip Source .NET (Dotnet) SURVEILLANCE ÉVÈNEMENT par mimiZanzan
Source avec Zip Source avec une capture BOT TYPE CHAINE DE MARKOV ( ACTOR PAR EXEMPLE) par buron
Source .NET (Dotnet) VB.NET CAMERA VIDEO par moezzeom
Source avec Zip Source avec une capture Source .NET (Dotnet) CARNET D'ADRESSE par colby

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) MODIFIER LES EXTENSION DES FICHIERS par okosa
Source avec Zip Source .NET (Dotnet) CLASSE DE LOG - LOGGER LES ÉVÈNEMENT D'UNE APPLICATION par novadys
Source avec Zip MODULE DE CLASSE FICHIER par webnomad
Source avec Zip FAT RECOVER : RÉCUPÉRER LES FICHIERS EFFACÉS DE VOS PARTITIO... par ShareVB
Source avec Zip Source avec une capture ENREGISTRER ET CHARGER LISTVIEW DANS FICHIER AVEC IMAGE ETC.... par draluorg

Commentaires et avis

Commentaire de conseildg le 07/10/2006 08:52:47

ce programme peut-il fonctionner en VB6 ?
Merci par avance.

Commentaire de Raidwan le 08/10/2006 01:23:44

Je pense que oui... en fait il n'utilise pas vraiment de librairie .Net, c'est juste que c'est une intégration que j'ai faite dans un gros projet que j'ai développé en .Net ... à tester sous VB6

Commentaire de papawemba le 09/10/2006 10:37:42

Merci d'avoir partagé ce morceau de code... ;o)

juste une petite suggestion:
lorsque l'on implémante ton code dans une appli qui tourne en 24/24.... avec des logs toutes les 10 minutes... je te laisse imaginer la taille du fichier de log au bout d'un mois :o|

donc ce qui serait interressant, ce serait de tester la taille du fichier et dans créér un second pour eviter les lenteurs....

ou de purger les évènements vieux de x jours...

Commentaire de papawemba le 09/10/2006 10:39:39

désolé, je n'ai pas exploité toutes les configurations de ta classe....
Oups, désolé, j'ai glissé chef ;o)

Commentaire de Raidwan le 09/10/2006 13:56:26

Pas de mal, ça soulève justement une chose..Peut être que ce n'est pas assez explicite...mais sinon la taille des fichiers par défaut est de 800ko...
il serai aussi facile de faire un fichier de log par jour et par taille...

des petites suggestions...Enfin bon on va pas refaire log4j ... :)

Commentaire de Jean_Elens le 15/10/2006 09:31:06

Je ne suis pas sur de toutes tes explications. Par exemple, à la première ligne tu dis :
' pour que la procédure soit connu de tous
Option Explicit On

selon moi cette option (par defaut sur ON) oblige de déclarer toutes tes variables. voir site

http://msdn2.microsoft.com/fr-fr/library/y9341s4f.aspx

Commentaire de Raidwan le 16/10/2006 14:33:52

Salut Jean_Elens,

Alors j'explique le pourquoi du "Option Explicit", quand je met "'pour que la procedure soit connu de tous", c'est en fait pour que l'on puisse appeler de n'importe quelle autre classe du projet la procedure ecrireLog() sans avoir à effectuer : LogMod.ecrireLog(), c'est tout, je vois ça comme un moyen de rendre "super public" des procédures ou fonctions qui seront alors aquisent de base dans toutes les autres classes du projet...C'est un peu comme on appel "Option Explicit", pour définir par exemple les variables de configuration d'un programme qui seront accessible à tous...Je me repète un peu là...

Bon donc en gros c'est ça l'idée, aprés le "oblige de déclarer toutes tes variables", ben c'est le cas, sauf que j'utilise un peu la méthode du singleton et qu'il n'y aura qu'un objet Log chargé en mémoire...

En tout merci de soulevé cette question, ça me permet aussi d'être plus clair dans mes choix...enfin j'essais :p

Commentaire de Raidwan le 16/10/2006 14:46:13

Ok je reviens sur ce que je viens de dire...
Le "option explicit" à ON ne sert strictement à rien dans mon code, si on laisse la propriété du compilateur à ON et mon explication est complètement fausse et totalement basé sur des croyances anciennes mal apprisent manquantes de nombreuses informations....Milles excuses :p

Commentaire de Jean_Elens le 16/10/2006 16:02:30

Pas de mal. Le principal est de s'améliorer...

Commentaire de le_nain27 le 19/10/2006 04:52:11

Radiwan: En déclarant EcrireLog de ta classe en "shared" tu n'aboutis pas au même résultat ?

Commentaire de marech_a le 13/01/2009 16:05:53

Bonjour,

comment faut-il faire pour implémenter votre code dans un nouveau programme avec Visual Basic 2008 Express?

Merci.

Commentaire de Raidwan le 13/01/2009 19:50:12

@Marech_a :
il suffit de modifier la méthode :
#  Public Sub EcrireLog(ByVal type As String, ByVal texte As String)
# If (objLog Is Nothing) Then
# objLog = New log4Raid(Environment.CurrentDirectory + "\logs", "Log")
# End If
# objLog.EcrireLog(type, texte)
# End Sub

la ligne : objLog = New log4Raid(Environment.CurrentDirectory + "\logs", "Log")

et de personaliser l'appel en passant des paramètres que vous voulez,

Ensuite pour l'appeler dans votre code, il suffit simplement d'appeler la méthode EcrireLog()

@Le_Nain27 : Ce code date, il est évidant qu'aujourd'hui je n'écrirai pas la même chose, le fait d'écrire un "module" me parait déjà aberrant. Donc pour répondre à votre question, en fait il faut passer la classe statique (ou shared) et gérer l'appel à Ecrirelog via un singleton, pour après utiliser la méthode avec un syntaxe dans le genre : Log4Raid.EcrireLog("test","test")


Commentaire de goldenboy7 le 27/11/2009 17:10:40

Bonjour

Quelqu'un pourrait il préciser ce qu'il faut modifier dans ce code pour l'adapter au VB6 ?
@ Raidwan : peux tu le faire stp ? ca ne devrait pas être trop long !

Merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Problème pour renommer un fichier avant de l'envoyer par mail [ par mistermail ] Bonjour, Voila j'aimerais renommer les fichiers présents dans un répertoire avant de les envoyer par mail. Je ne vois pas où se trouve le prob fso move file URGENT [ par hujikole ] je n'arrive pas a deplacer un fichier qui se trouve sur un autre ordinateur une erreur me dit "permission refusé" alos que le fichier de l'autre ordin CREER UN FICHIER LOG [ par gianfa ] HELLO J'AI VOULUR CREER UN FICHIER LOGMAIS CE QUE JE N'ARRIVE PAS à FAIRE C'EST D'INDIQUER LE NOMBRE DE FOIS QUE L'UTILISATEUR à ACCEDER à MON PROGRAM *URGENT* Programme & DLLs en 1 seul file [ par Jo Ace ] Je voudrais réunir mon programme et les DLL de VB en 1 seul fichier en faisant en sorte que quand on ouvre ce fichier mon programme se lance (donc for Access et Resource File [ par AtomixSnake ] Salut,Est-il possible de charger un fichier mdb(Access) depuis un Res(Resource File) et l'utiliser avec la commande "DAO.Workspaces(0).OpenDatabase" p [size=5]LIGNE de commande[/size=5] [ par nilufacou ] Mon application a une ligne de commande comme ci dessous :app.exe ~file$Je voudrais que cette ligne de commande se lance lors d'1 click roit sur 1 fic Comment creer le fichier log d'une appli ? [ par Rmano ] Salut !J'aimerais savoir comment creer un fichier log pour une appli. Je voudrais savoir comment faire pour recupérer certaines erreurs (exple : il ya Executer un fichier non .exe ??? [ par wico2002 ] Je me fais un autorun pour mes .exe et j'ai un probleme. j'écris: fichier = app.Path & file.fileName shell fichier,vbNormalFocusle file.fileName ren impression avec l'option file de l'imprimante [ par muzza ] Dans les proprietes de l'imprimante on a la possibilité d'imprimer non pas sur le port lpt1 mais dans un fichier (option file).Le probleme qui se pose fichier log [ par smoron ] salut!j utilise un fichier de LOG (dll ARLOG) pour un programme.une fois le log rempli je dois le vider ligne par ligne.cest ca que je ne sais pas fa


Nos sponsors


Sondage...

CalendriCode

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales