Rechercher : dans
Par :

[VisualC++] Création de fichier log

Dernière réponse le 11 aoû 2007 à 05:00:14 GNONGNON, le 7 aoû 2007 à 00:17:29 
 Signaler ce message aux modérateurs

Quelqu' un peut il me donner d' idée sur la création de fichier log
pour garder traçe de l'exécution des fonctions d' une dll.
Je tente avec fopen et stderr mais rien de concret
Ce que je veux est que le fichier log garde l' information
sur toutes les grandes étapes d' exécution de mon programme
afin de pouvoir m' indiquer quelle partie s' est bien déroulée
et quelle partie ne l' a pas été
Car ceci me permettra de savoir réellement où se pose un problème
Merci de m' éclairer svp
Je compte sur vous !!!

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « [VisualC++] Création de fichier log » dans :
Créer un fichier Autorun.inf VoirCréation de fichier autorun Autoriser l'exécution automatique Création du fichier autorun.inf Personnaliser l'icône Personnaliser le texte Personnaliser le menu Autoriser l'exécution automatique Une fonctionnalité de Windows...

1

mamiemando, le 7 aoû 2007 à 20:59:14

Ben peu importe que ce soit dans une dll ou un programme classique, tu ouvres un std::ofstream et tu écris dedans s'il est bien ouvert. A la fin tu le fermes et c'est fini.

#include <fstream>
#include <iostream>


int main(){
    const char *filename = "plop.log";
    std::ofstream ofs(filename);
    if(!ofs){
        std::cerr << "impossible d'écrire dans [" << filename << ']' << std::endl;
        throw;
    }
    //...
    ofs << "debut" << std::endl;
    //...
    ofs << "etape 1" << std::endl;
    //...
    ofs << "etape 2" << std::endl;
    //...
    ofs << "fin" << std::endl;
    ofs.close();
    return 0;
}

On compile et on exécute :
(mando@aldur) (~) $ g++ -W -Wall plop.cpp
(mando@aldur) (~) $ ./a.out

On vérifie que plop.log contient bien les messages :
(mando@aldur) (~) $ cat plop.log
debut
etape 1
etape 2
fin

Bonne chance

Répondre à mamiemando

2

GNONGNON, le 8 aoû 2007 à 05:28:22

Merci pour ta réponse
mais un souci
peut tu etre un peu plus clair dans ton explication
car c' est ma 1ere utilisation de fichier log

je met ton code directement dans le code source de mon programme ou je crée un nouveau fichier?
comment dois je faire *
Je compte sur ta réponse

Répondre à GNONGNON

3

mamiemando, le 8 aoû 2007 à 09:54:14

En fait il faut bien comprendre que créer fichier de log, ça consiste juste à ouvrir une fichier et écrire dedans. Quand tu ouvres un fichier,
- soit tu le réecris (w = write),
- soit tu écris à la suite de son contenu (a = append).

Pour ouvrir un fichier tu peux sois utiliser
- soit les ofstream du C++ (les flux dans un fichier de sortie, header <fstream>),
- soit fopen (qui vient du C, header <cstdio>).
Si tu es arrivé à l'ouvrir (tester le retour de fopen ou vérifier que le std::ofstream crée est valide), tu peux commencer à écrire dedans, et le fermer une fois que tu as fini d'écrire dedans.

L'exemple que je te donne te montre comment utiliser un std::ofstream de manière usuelle, après il faut l'adapter à ton code. Dans ton cas on pourrait imaginer que tu crées une fonction qui ouvre un fichier en append (le fichier de log) à chaque fois que tu en as besoin. Exemple :

void write_log(const char *msg){
  std::ofstream ofs("plop.log",std::ofstream::app); // fichier de log ouvert en append
  if(ofs) ofs << msg << std::endl;
  ofs.close();
}

Bonne chance

Répondre à mamiemando

4

GNONGNON, le 8 aoû 2007 à 22:50:18

Merci mamiemando
J' explore ta piste et je te tiendrai au courant
Toutefois une précision : le fichier log que je souhaiterais faire , est un fichier où non seulement je pourrai écrire du texte ,mais il faudra que le systeme y ecrive aussi afin de me retracer exactement comment s' est passé l' exécuton du programme ; par exemple tel fonction est bien exécutée à tel heure et a généré tel valeur ...... tel autre fonction n' a pas pu etre exécuté pour telle raison; telle fonction a été appellée à tel et tel niveau
toutes les explication me seront utiles
Encore merci

Répondre à GNONGNON

5

mamiemando, le 9 aoû 2007 à 00:38:04

Ben ca c'est ton programme qui doit le gérer. Tu peux compléter la fonction write_log que je t'ai donné en utilisant ça pour récupérer la date :
aidez moi en c borland

#include <fstream>
#include <ctime>

void write_log(const char *msg,const char *filename_log = "plop.log"){
  std::ofstream ofs(filename_log,std::ofstream::app); // fichier de log ouvert en append
  if(ofs){
    time_t a;
    time(&a);
    ofs << ctime(&a) << ' ' << msg << std::endl;
  }
  ofs.close();
}

Ensuite à toi d'appeler write_log dans tes fonctions a bon escient.
void f(){
  write_log("entre dans f");
  // ... code de la fonction f
  write_log("sort de f");
}

Bonne chance

Répondre à mamiemando

6

GNONGNON, le 9 aoû 2007 à 12:19:49

T' es génial
je me met tout suite au travail je te tiens au courant
merci

Répondre à GNONGNON

7

GNONGNON, le 9 aoû 2007 à 14:14:05

C' est bon mamiemando
ca compile
mais ou se trouve le fichier plop.log
je veux l' ouvrir pour voir son contenu

je compte sur ta réponse
merci
(excuse moi si je pose des question trop ...)

Répondre à GNONGNON

8

mamiemando, le 9 aoû 2007 à 20:55:10

Il se trouve dans le répertoire depuis lequel tu as lancé ton exécutable. Pas de souçis pour les questions tu es en bonne compagnie ;)

Répondre à mamiemando

9

GNONGNON, le 10 aoû 2007 à 07:35:26

En fait je ne sais comment t' expliquer je ne peux lancer l' executable
car aucun autre projet ne fait appel aux fonction de la dll
t' as une idée

Répondre à GNONGNON

10

mamiemando, le 10 aoû 2007 à 10:02:17

En fait j'ai surtout pas compris à quoi servait la dll si elle n'est pas utilisée. Au pire pour debugger ta dll tu crées un exécutable qui appelle spécifiquement les fonction à tester.

Bonne chance

Répondre à mamiemando

11

GNONGNON, le 10 aoû 2007 à 10:17:27

En fait elle est destinée à l' utilisation par un système pour la gestion de mot de passe

Répondre à GNONGNON

12

GNONGNON, le 10 aoû 2007 à 10:34:18

Es ce que tu comprends mon problème !

Répondre à GNONGNON

13

mamiemando, le 10 aoû 2007 à 15:22:37

Ben non je comprends pas où est le problème. Fais un programme qui utilise cette librairie pour la tester. Je comprends pas ce qui te bloque.

Répondre à mamiemando

14

GNONGNON, le 10 aoû 2007 à 22:35:37

Normalemenet la dll seront utilisées par le winlogon.

Répondre à GNONGNON

15

 mamiemando, le 11 aoû 2007 à 05:00:14

Désolé je comprends pas. Je ne connais pas windows. Pour moi un programme ça peut utiliser des librairies, donc libre à toi d'appeler les fonctions de cette librairie que tu veux. Je ne comprends pas ce qeu tu veux faire peut-être. Reviens à un problème C++ sinon je ne peux pas t'aider.

Bonne chance

Répondre à mamiemando