Bonjour;
Je suis actuellement en train de coder un serveur sous windows qui qui s'intégrera comme un service, et avant même de commencer à coder mon programme j'ai pensé que la meilleur chose serait de coder une bonne fonction qui récupère mes erreurs et une deuxième qui les log dans un fichier car aucune interaction avec un quelconque utilisateur n'est prévue au autorisé pour un service.
Mon problème est le suivant, j'ai mit ces deux fonction au point mais mon souci principale est que si une de ces deux fonctions échoue à cause des fonctions d'ouverture de fichier, de récupération de la date et autres qui ce trouve à l'intérieur de celle-ci, alors le messages de log n'apparaitra nul part et ces donc vraiment embétant pour débugger mon programme.
Ma question est,
Comment construire une fonction de log et récupération d'erreur efficace pour logger mes erreurs?
Celon-vous les messages d'erreurs du système sont-il suffisant?
Dois-je faire du contrôle d'erreur à l'intérieur de ces fonctions, est-ce vraiment utile?
Merci d'avance des pistes sur lesquelles vous pourrez me lancer.
Et bien sur si vous avez d'autre élément à apporter à ma réflexion je suis preneur.
voici mes deux fonctions pour le moment:
log d'erreur
récupération d'erreur:
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
32
33
34
35
36
37
38
39
40
41
42 int RecordedError(DWORD error_code, const char *error_msg, const char *failed_function, const char *comment const char *ip_client const char *port_com) { // consigne la date,l'heure et l'erreur FILE *fichier = NULL; time_t date ; char *s_date = NULL; char *ptr = NULL; fichier = fopen("LOGFILE", "a"); if( fichier != NULL) { /* recupere la date et l'heure */ date = time(NULL); // recupere la date en brut s_date = ctime(&date); // retourne la date en chaine /* suprime le retour chariot de la chaine de la date */ ptr = s_date ; ptr = ptr + (strlen(s_date) -1); *ptr = '\0'; /* log le fichier */ fprintf(fichier,"%s : Ip Client %s : Port COM %s : %ld : %s : Failed function \"%s()\" : %s", s_date, ip_client, port_com, error_code, error_msg, comment ); fprintf(fichier, "\n"); fclose(fichier); return 0; } else { exit(0); } }
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
32
33
34
35
36 int get_error_msg( char * buffer_error, int buffer_size ) { LPVOID message; char * ptr; DWORD error_code, error_size; error_code = GetLastError(); error_size = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error_code, 0, (LPTSTR) &message; 0, NULL); if( error =! 0 ) { /* suprime le retour chariot de la chaine */ ptr = error_buf ; ptr = ptr + (strlen(error_buf) -1); *ptr = '\0'; if(error_size<buffer_size) { strcpy(message, buffer_error); LocalFree(message); } else exit(0); } else exit(0); return 0; }
Partager