순환 로깅을 수행 할 수있는 로거 라이브러리가 있는지 알고 싶습니다.순환 파일 로깅
저는 현재 log4C를보고 있습니다.하지만 순환 로깅을 수행 할 수있는 충분한 문서를 찾을 수 없습니다.
누구든지이 작업을 수행 한 경우 친절하게 알려주세요.
감사
순환 로깅을 수행 할 수있는 로거 라이브러리가 있는지 알고 싶습니다.순환 파일 로깅
저는 현재 log4C를보고 있습니다.하지만 순환 로깅을 수행 할 수있는 충분한 문서를 찾을 수 없습니다.
누구든지이 작업을 수행 한 경우 친절하게 알려주세요.
감사
그것은 Log4C을 보인다는 고통스럽게 아니라이 시점에서 문서화되어 있지 않습니다. 그들은 Log4J 페이지에서 "롤링"로그를 언급했지만 아마도 원하는 것입니까? 용어 혼동의 문제 일 수 있습니다.
정말로 순환 로깅을 원하십니까? 롤링 로그를 사용하는 것이 나을 것입니다.
즉
순환 로깅 : 다시 log.1
log.4 다음 log.3 다음 다음 다음 log.2 압연 로깅을 log.1하는 로그 : 네 개의 로그 파일이, log.1 항상 가장 최근의 것이고 log.2,3,4는 오래된 로그 항목입니까?
여기 이것은 버전을 절단 예
입니다. 우리에서는 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
순환 로깅이 아닌 순환 로깅입니다. 또한 log_fp = 0; 은 log_fp = -1이어야합니다. 그러나 그것은 항상 덮어 씌워지기 때문에 대단히 중요하지 않습니다. –
사실 log_fp = fopen (file1, "a") 인 경우 문제가 발생할 수 있습니다. 은 파일 설명자로 0을 반환합니다. –
나는 당신이 open (2)과 fopen (3)을 혼동하고 있다고 생각한다. –
왜 안 되니? 개발 환경에서 실행하면 빠르게 디스크 공간이 부족하여 대규모 로그를 생성 할 수 있습니다. 내 직장에서는 많은 수의 프로세스와 디버그 출력 때문에 순환 로그를 사용합니다. – hhafez
그는 순환 로깅을 요청하고 있으며 로깅을 로깅해야 할 것 같습니다. 나는 당신이 왜 왜 물어 보지 않는지 이해하지 못합니다. –