Buongiorno
Ho un problema un po strano con un logger che ho sviluppato un po di tempo fa. Il funzionamento è molto semplice:
La funzione prende un intero che rappresenta il livello dell'informazione da loggare (errore,warning,info,eccetera) ed una stringa di formato che poi viene passata ad una fprintf.codice:void LOG(int level,char *fmt, ...)
Il codice è addirittura banale
Questo è praticamente tutto il codice della funzione. Ora che succede: se imposto un livello di logging alto vengono scritte molte informazioni, perchè il programma che integra il logger stesso è invocato continuamente.codice:if (level<=LOG_LEVEL) { time_t now; char * ctime_str; char * str_date; va_list args; char buf[1024]; va_start(args, fmt); vsprintf(buf, fmt, args); va_end(args); OutputDebugString(buf); str_date = (char *)malloc(128*sizeof(char)); now = time(NULL); ctime_str = ctime(&now); strncpy(str_date,ctime_str,strlen(ctime_str)-1); str_date[strlen(ctime_str)-1] = '\0'; fprintf(log_file, "[%s][%s]: %s",str_date,LOGLBL[level], buf); fflush(log_file); #ifdef _DEBUG_LOGV fprintf(stderr, "[%s][%s]: %s",str_date,LOGLBL[level], buf); fflush(stderr); #endif free(str_date); }
Il problema: nonostante il flush del buffer vedo la memoria occupata dall'applicazione salire costantemente fino, nel caso limite, a sforare la quantità di memoria virtuale della macchina. Se imposto un livello di logging basso o addirittura disabilito il logger la memoria occupata resta stazionaria perciò sono sicuro che dipende da questo.
Ci deve essere qualche buffer che si riempie ma non so dove...il tutto gira su winXP.
Grazie dell'attenzione
![]()

Rispondi quotando



