2009-03-04 21 views
4

Ich würde gerne wissen, ob es Logger-Bibliotheken für C gibt, die zirkuläre Dateiprotokollierung durchführen können?Circular file logging

Ich bin derzeit auf der Suche nach log4C, kann aber nicht genug Dokumente finden, die sagen können, dass es zirkuläre Protokollierung tun wird.

wenn jemand dies getan hat. lass es mich wissen.

Dank

Antwort

0

Es scheint Log4C wird an dieser Stelle nicht schmerzlich gut dokumentiert. Sie zeigen jedoch auf die Log4J-Seite, die "rollende" Logs erwähnt, ist das was du willst? Es könnte nur eine Frage der Terminologie Verwirrung sein.

1

Sind Sie wirklich sicher, dass Sie Rundschreiben möchten? Ich denke, du wärst besser mit rollenden Baumstämmen.

dh

Umlaufprotokollierung: log log.1 dann log.2 dann log.3 dann log.4 dann log.1 zurück

Roll Logging: haben vier Protokolldateien, in denen log.1 ist immer die neueste, und log.2,3,4 sind ältere Protokolleinträge?

+0

warum nicht? Wenn Sie auf einer Entwicklungsumgebung arbeiten, können Sie schnell genug Speicherplatz auf Ihrer Festplatte haben und große Protokolle erstellen. an meinem Arbeitsplatz benutzen wir Rolling Logs wegen der großen Anzahl von Prozessen und der Debug-Ausgabe – hhafez

+1

Er bittet um zirkuläre Protokollierung, und ich denke, er sollte wahrscheinlich Rolling Logging wollen. Ich verstehe nicht, warum du fragst "warum nicht?". –

2

hier ist ein Beispiel

Dies ist eine abgespeckte Version geschnitten wird. In unserem verwenden wir vargs und formatieren sie vor dem Aufruf von log_it.


typedef const char* c_str; 
FILE* log_fp = 0; 
const int max_log_size = 4 * 1024 * 1024; 
const int max_no = 5; 
c_str prefix = "logs_"; 
c_str postfix = ".txt"; 

void log_it(c_str str) 
    { 
    char file1[100], file2[100]; 

    if(! log_fp) 
     { 
     sprintf(file1 "%s%d%s", prefix, 0, postfix); 
     log_fp = fopen(file1, "a"); 
     } 

    if(log_fp) 
     { 
     if(ftell(log_fp) > max_log_size) 
      { 
      fclose(log_fp); 
      log_fp = 0; 

      for(int i = (max_no - 1); i >= 0; i--) 
       { 
       sprintf(file1 "%s%d%s", prefix, i, postfix); 
       sprintf(file1 "%s%d%s", prefix, i+1, postfix); 
       rename(file1, file2); 
       } 

      sprintf(file1 "%s%d%s", prefix, 0, postfix); 
      log_fp = fopen(file1, "a"); 
      } 

     fputs(str, log_fp); 
     fflush(log_fp); 
     } 
    } 

Ich hoffe, das hilft.

dave

+0

Das ist Protokollierung nicht zirkuläre Protokollierung. Auch log_fp = 0; sollte wahrscheinlich log_fp = -1 sein; aber das ist nicht sehr wichtig, da es immer überschrieben wird. –

+0

In der Tat haben Sie möglicherweise ein Problem, wenn log_fp = fopen (file1, "a"); gibt immer 0 als Dateideskriptor zurück. –

+1

Ich denke, du verwirrst open (2) und fopen (3) –