로그파일을 어떻게 만드시나요?
글쓴이: yundorri / 작성시간: 수, 2006/03/22 - 5:38오후
로그파일을 만들기 위해서
system( "echo ... > /tmp/log" ) 로 하거나,
fprintf( fp, "날짜, 시간....", ... ) 로 사용해 왔습니다.
그런데 이놈의 로그파일이 너무 커져서 최근 로그한
20000 라인 정도만 보관하고 싶을 때는 어떻게 하는게
가장 좋을까요?
전체를 읽었다가 가장 처음 라인을 삭제하고 다시 전부를
Write 했더니 시간이 너무 걸리고...
파일을 다른 이름으로 임시저장했다가 tail -n 20000 임시파일
한 뒤 이름을 로그파일로 변경해보기도 했지만
어떤것도 신통치 않습니다. 좋은 방법이 없을까요????
Forums:
로그출력루틴에
로그출력루틴에 라인카운트를 넣어 적절히 파일을 열고/닫는(일종의 로그로테이트) 것은 어떨까요?
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
로그할 때 라인
로그할 때 라인 카운트를 전역으로 저장하고 있다가
지정한 카운트를 넘기면 그 때 어떻게 한다는 말씀이지요?
근데, 그 때 어떻게 해야 로드가 적게 걸릴까요?
다른 이름의 파일을 열어서 20000 정도를 두번째 줄 부터 Write 하려면
로드가 꽤 되더라구요. 참고로, 파일 사이즈는 20000 라인이 다 차면
약 2MB 정도 됩니다.
그리고 Log는 1초에도 여러번 되는 경우도 발생을 합니다.
만약, 힘들다면 가장 최근 로그를 최하단에 오지 않고 최상단으로
그러니까, 역순으로 한다면 좀 쉬운 방법이 있을까요?
idle time 일때
log Write는 그대로 사용하시고
idle time때 도는 Task에서 stat 로 size 확인하시고
기준치 이상이면 뒷부분만 복사하면 안될까요 ?
A better tomorrow
lim jong hoan
A better tomorrow
사실, idle
사실, idle time이라는게 없어서요.
log할 장비는 쉴 새 없이 돌아가거든요.
장비와 장비를 control하는 pc간의 interface를 log하는거라서
언제 어느시점에 로그가 들어올지 알 수가 없네요.
파일 포인터를 라인단위로 옮기는건 어떨까요?
fseek등을 이용해서 말이죠.
최근 20000 라인은
최근 20000 라인은 남기다 라는 것을 포기 하시고
그냥 일반적으로 사용하는 방법인
log rotate 를 하시고 최근 rotate 된 파일은 일정 기간
보관하시는 방법을 하시는게 좋을 듯 하군요.
네.. 게시판을
친절히 알려 주셔서 감사합니다.
게시판도 검색해 봤는데 그게 젤 좋은 방법같군요.
댓글 달기