IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

LIB de LOG et TRACE


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut LIB de LOG et TRACE
    Bonjour a tous,

    alors voici, j'ai ecrie un fichier log.h qui contient des MACRO permettant de créer une lib de Trace, et la voila :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #ifndef LOG_H_INCLUDED
    #define LOG_H_INCLUDED
    #define LOG_FILE    "/tmp/apc.log"
    #ifdef DEBUG_CONSOLE
    #define LOG_START()
    #define LOG(mesg, args...)   fprintf(stderr, "%s: (function %s line %d):",__FILE__,__FUNCTION__,__LINE__); \
                                 fprintf(stderr, mesg "\n", ##args)
    #define LOG_END()
    #endif  // DEBUG_CONSOLE
    
    #ifdef DEBUG_FILE
    #define LOG_START()         FILE *log_file_decriptor; \
                                if((log_file_decriptor=fopen(LOG_FILE, "w"))==NULL) \
                                LOG("LOG can not start.")
    #define LOG(mesg, args...)  fprintf(log_file_decriptor, "%s: (function %s line %d):",__FILE__,__FUNCTION__,__LINE__); \
                                fprintf(log_file_decriptor, mesg "\n", ##args)
    #define LOG_END()           if(fclose(log_file_decriptor)!=0) \
                                LOG("LOG ERROR")
    #endif  // DEBUF_FILE
    
     
    
    #if !defined(DEBUG_FILE) || !defined(DEBUG_CONSOLE)
    #define LOG_START()
    #define LOG(mesg, args...)
    #define LOG_END()
    #endif
     
    #endif // LOG_H_INCLUDED
    
    pour le LOg sur la console sa marche avec DEBUG_CONSOLE
    mais pour les fichier ça ne marche pas et je sais pas pourquoi ?

    j'utilise le fichier comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <log.h>
     
    void function(type args, ...)
    {
         LOG_START();
         ...
         LOG(Message);
         ...
         LOG_END();
    }

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Petite remarque en passant :

    Tout le monde n'a pas un compilo C99 sous la main !

    Ce code ne peut pas être compilé avec les compilos Microsoft par exemple ( pour ne citer qu'eux...bon, c'est pas un grand mal mais quand même !)

    Le C99 n'est pas impémenté par tout le monde (c'est pas forcément un grande perte ... pour que cela apporte !)

    c'est dommage de ne pas être "portable" (au sein réalité du terrain) pour des fonctionnalités de base comme du log....
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Citation Envoyé par vicenzo Voir le message
    Petite remarque en passant :

    Tout le monde n'a pas un compilo C99 sous la main !

    Ce code ne peut pas être compilé avec les compilos Microsoft par exemple ( pour ne citer qu'eux...bon, c'est pas un grand mal mais quand même !)

    Le C99 n'est pas impémenté par tout le monde (c'est pas forcément un grande perte ... pour que cela apporte !)

    c'est dommage de ne pas être "portable" (au sein réalité du terrain) pour des fonctionnalités de base comme du log....
    vraiment une trés trés bonne remarque... MERCI

    Meis pour le moment est ce que il y a une erreur dans le code ?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Une autre remarque en passant, d'après ce que je comprend, il faut que LOG_START(), LOG() et LOG_END() soient dans la même fonction pour que le descripteur de fichier soit connu

    Que se passe t'il si tu as des appels imbriqués, je pense que cela va poser un problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    void fct_1(void)
    {
       LOG_START();
       LOG("mon message");
       fct_2();
       LOG_END();
    }
     
    void fct_2(void)
    {
       LOG_START();
       LOG("mon autre message");
       LOG_END();
    }
    En plus, c'est un peu lourd d'appeler LOG_START(), LOG() et LOG_END() à chaque fois.
    Une autre solution serait d'avoir LOG_START() et LOG_END() dans la fonction main() et ensuite tu mets tes LOG() où tu veux dans le code sans soucis d'appel imbriqué.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    Une autre solution serait d'avoir LOG_START() et LOG_END() dans la fonction main() et ensuite tu mets tes LOG() où tu veux dans le code sans soucis d'appel imbriqué.
    Ce n'est pas suffisant. Il aussi faut que FILE *log_file_decriptor soit une variable globale.
    Fait comme ca dans ton .h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    extern FILE *log_file_decriptor;
    #define LOG_START()          \
                                if((log_file_decriptor=fopen(LOG_FILE, "w"))==NULL) \
                                LOG("LOG can not start.")
    et declare ta variable dans un .c du style global.c

    Ainsi tu pourras faire un LOG_START en début de ton main, un LOG_END à la fin, et ensuite tu pourras utiliser LOG() n'importe où.

Discussions similaires

  1. [VB.NET] Logging méthode Trace
    Par kevin01330 dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/05/2013, 10h43
  2. Choisir une lib de log
    Par pavel dans le forum C++
    Réponses: 3
    Dernier message: 02/12/2009, 23h23
  3. Log et trace d'un projet
    Par aldente dans le forum ANT
    Réponses: 1
    Dernier message: 09/06/2009, 18h04
  4. recherche lib de log
    Par r0d dans le forum C++
    Réponses: 6
    Dernier message: 09/06/2008, 14h32
  5. log archive trace
    Par MIMO_MAK dans le forum Administration
    Réponses: 4
    Dernier message: 15/01/2008, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo