Précédent   Forum du club des développeurs et IT Pro > Général Développement > Programmation système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/09/2012, 17h14   #1
vdary
Invité de passage
 
Homme
Lycéen
Inscription : septembre 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Lycéen
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2012
Messages : 7
Points : 1
Points : 1
Par défaut Construction d'une fonction de log d'erreur

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

Code :
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);
		}
}
récupération d'erreur:

Code :
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;	
}
vdary est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h10.


 
 
 
 
Partenaires

Hébergement Web