Bonjour,
J'aurais souhaité avoir votre avis sur la création d'une fonction de log des erreurs.
Voilà ce que j'ai pensé faire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
typdef struct
{
char **header;
char **msg;
char *buffer;
t_uint64 line;
t_uint64 line_sz;
t_uint64 index;
}t_log;
void log_write( t_log *p_log, const char *header, char *msg )
{
if ( header && msg )
{
if ( index < line )
{
str_replace(p_log->header[index] , header);
str_replace(p_log->msg[index], msg);
index++;
}
}
} |
Chaque fonction aura systématiquement pour argument une variable de type t_log* qui permettra d'enregistrer dans le tableau 2D header, le nom du header qui contient la fonction en faute puis, dans un tableau 2D msg, un message pour ajouter des indications sur l'erreur.
Et à chaque nouvelle erreur, on incrémente index qui définit la position courante dans les tableaux 2D où écrire les informations.
Les dimensions de ces tableaux 2D seront initialisés et fixes avant son utilisation bien entendu.
Ma question étant la suivante : cela vous parait-il correcte (Pas le code mais la manière de faire) ?
/*EDIT 1 suite à la remarque d'edgar*/
Une question subsidiaire : Est-ce qu'il possible de refaire une fonction comme printf mais qui renverrait le resultat vers un char* ? De cette façon je pourrai ajouter des valeurs de variables à msg ?
Exemple
log_write(p_log, "header.h::functionX", la_fonction("a=%d, b=%c", a, b) );
/*EDIT 2*/
Ok j'ai finalement trouvé la fonction asprintf après avoir bien galéré. Je ne devais pas taper ce qu'il fallait dans google xD
On entend jamais parler de cette fonction, à juste titre ?
Exemple
log_write(p_log, "header.h::functionX", asprintf("a=%d, b=%c", a, b) );
/*EDIT 3 suite à la remarque d'Obsidian*/
asprintf n'est pas un standard donc.... Bonjour snprintf ?
Exemple
snprintf(t_log->buffer, "a=%d, b=%c", a, b), log_write(p_log, "header.h::functionX", t_log->buffer );
J'avoue que ça ne m'enchante pas de faire comme ça mais on dirait qu'il n'y a pas d'autre solutions sinon de coder sa propre fonction. Sinon je ferai sans, tant pis, je me contenterai d'un string.
log_write(p_log, "header.h::functionX", "Description de l'erreur" );
Merci d'avance.
666ème message xD
Partager