méthode optimisée d'écriture dans un fichier log

méthode optimisée d'écriture dans un fichier log - C - Programmation

Marsh Posté le 27-03-2004 à 11:48:30    

slt à tous!
alors voilà: je code en ce moment une appli (sous Linux) comprenant 3 process, et je voudrais enregistrer tout ce qu'il se passe dans un fichier log.
ex:
[pid_process]Nom_Fonction_Appelante--Malloc OK
...
 
pour cela j'ai créé un ti TAD erreur:

Code :
  1. dans mon .h:
  2. #define MALLOC_OK 1
  3. #define MALLOC_ERROR -1
  4. ...
  5. void log(char* strFctAppelante, int iErrNo);


 

Code :
  1. dans mon .c:
  2. void log(char* strFctAppelante, int iErrNo)
  3. {
  4. FILE* file;
  5. file = fopen("log", "a" );
  6. switch(iErrNo)
  7. {
  8.   case -1:{
  9.            fprintf(file, "[%d]%s--Malloc Error!\n", getpid(), strFctAppelante);
  10.            break;
  11.           }
  12.   case 1:{
  13.            fprintf(file, "[%d]%s--Malloc OK\n", getpid(), strFctAppelante);
  14.            break;
  15.           }
  16.   ...
  17. }
  18. fclose(file);
  19. }


 
sauf que le pb, c'est qu'au fur et a mesure que mon appli grandit, il y a de + en + d'infos à mettre en log.
je me suis donc rendu compte que l'ouverture/fermeture du fichier prennait trop de tps! et n'était pas optimal...
 
j'ai donc songé (un cours instant) a mettre mon descripteur de fichier en SHM... mais non.
 
une solution serait peut-être de faire une variable globale "FILE* file", je ne trouve pas ça très propre!
 
alors est-ce qqun ici aurait déjà été confronté au pb???
 
ps: j'ai trouvé dans un bouquin de progra C en Systeme d'Exploitation une fonction qui permettait d'écrire dans le fichier log de Linux /var/log/messages, seulement le pb qu'il faut les droits root pour lire ce fichier...
 
merci de votre attention!
;)

Reply

Marsh Posté le 27-03-2004 à 11:48:30   

Reply

Marsh Posté le 27-03-2004 à 12:02:00    

trouve autre chose, 3 process qui écrivent en même temps dans le même fichier, ça va faire boom

Reply

Marsh Posté le 27-03-2004 à 12:18:46    

Ben avec l'équivalent des Mutex ça doit être possible de sécuriser ça, non ?

Reply

Marsh Posté le 27-03-2004 à 12:20:10    

en shm oui
sinon tu fais des com par socket avec un process logger
 
dis, juste comme ça, tu log les erreurs de malloc pourquoi ? u fais quoi quand malloc échoue ?

Reply

Marsh Posté le 27-03-2004 à 13:36:45    

socket: connais po...
pour les erreurs: pour l'instant mon process 'sécurité' étant en charge de checker tout ça n'est pas encore en place, mais à terme, il enverra un SIG a un autre process qui fera quitter les autres process correctement (détachement de SHM et tt le tralala...)
 
pour les mutex: je suis pas sûr de savoir ce que c'est... c'est comme un sémaphore c ça??
si c'est le cas, si je pose un sem sur mon fichier log, les autres process ne pourront pas écrire dedans, ce qui ralentira encore plus mon appli (je précise que mon appli est simili temps réel!!!).
 
pour la SHM: si mon process 'maitre' créé la SHM avec le descripteur, que les 2 autres process s'y attache, est-ce que le fichier log sera ouvert pour eux aussi???
De plus (en faisant qques essais peut-être maladroits), l'écriture dans le fichier log sera-t-elle effective si ce fichier n'est pas fermer quand ma fonction log(...) est terminée???
 
thx

Reply

Marsh Posté le 27-03-2004 à 13:37:51    

socket :o
 
edit: toutes façons, qui te parle de mettre le descripteur en shm ? juste un buffer, le classqie producteurs/consommateur


Message édité par Taz le 27-03-2004 à 13:43:20
Reply

Marsh Posté le 27-03-2004 à 14:13:14    

sinon les questions c'est bien là où ya des '?' (moi je mets mm des '???' pour être sûr...) [:axlrose]

Reply

Marsh Posté le 27-03-2004 à 14:15:19    

ben je te dis de dédier un process à l'écriture du log : la communication doit se faire soit par shm (le process logger prends alors en charge, la création et la destruction) ou par socket

Reply

Marsh Posté le 27-03-2004 à 20:11:03    

non pas de process supplémentaire (imposé)

Reply

Marsh Posté le 27-03-2004 à 20:14:26    

alors ce n'est pas possible. il te faut un mutex en shm est réouvrir écrire fermer systèmatiquement le fichier

Reply

Marsh Posté le 27-03-2004 à 20:14:26   

Reply

Marsh Posté le 27-03-2004 à 20:53:36    

pourtant ça passe à la bourrin!!! (je c c'est pas une raison)
je veux dire que mes 3 process accèdent au fichier sans pb.
dis-moi si je comprends bien: le mutex servirait a protéger le fichier de façon à ce qu'il n'y ait qu'un seul process qui y écrive à la fois???

Reply

Marsh Posté le 27-03-2004 à 20:58:49    

oui, ça marche, jusqu'au jour ou ...

Reply

Marsh Posté le 27-03-2004 à 21:06:32    

vi, dangereux sans mutex ..

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed