2009-03-04 1 views
4

순환 로깅을 수행 할 수있는 로거 라이브러리가 있는지 알고 싶습니다.순환 파일 로깅

저는 현재 log4C를보고 있습니다.하지만 순환 로깅을 수행 할 수있는 충분한 문서를 찾을 수 없습니다.

누구든지이 작업을 수행 한 경우 친절하게 알려주세요.

감사

답변

0

그것은 Log4C을 보인다는 고통스럽게 아니라이 시점에서 문서화되어 있지 않습니다. 그들은 Log4J 페이지에서 "롤링"로그를 언급했지만 아마도 원하는 것입니까? 용어 혼동의 문제 일 수 있습니다.

1

정말로 순환 로깅을 원하십니까? 롤링 로그를 사용하는 것이 나을 것입니다.

순환 로깅 : 다시 log.1

log.4 다음 log.3 다음 다음 다음 log.2 압연 로깅을 log.1하는 로그 : 네 개의 로그 파일이, log.1 항상 가장 최근의 것이고 log.2,3,4는 오래된 로그 항목입니까?

+0

왜 안 되니? 개발 환경에서 실행하면 빠르게 디스크 공간이 부족하여 대규모 로그를 생성 할 수 있습니다. 내 직장에서는 많은 수의 프로세스와 디버그 출력 때문에 순환 로그를 사용합니다. – hhafez

+1

그는 순환 로깅을 요청하고 있으며 로깅을 로깅해야 할 것 같습니다. 나는 당신이 왜 왜 물어 보지 않는지 이해하지 못합니다. –

2

여기 이것은 버전을 절단 예

입니다. 우리에서는 log_it을 호출하기 전에 vargs를 사용하여 형식을 지정합니다.

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); 
     } 
    } 


나는이 도움이되기를 바랍니다.

dave

+0

순환 로깅이 아닌 순환 로깅입니다. 또한 log_fp = 0; 은 log_fp = -1이어야합니다. 그러나 그것은 항상 덮어 씌워지기 때문에 대단히 중요하지 않습니다. –

+0

사실 log_fp = fopen (file1, "a") 인 경우 문제가 발생할 수 있습니다. 은 파일 설명자로 0을 반환합니다. –

+1

나는 당신이 open (2)과 fopen (3)을 혼동하고 있다고 생각한다. –