시간 여행 및 로그 파일

시간 여행 및 로그 파일

개발 시스템에서 레거시 코드 기반의 변경 사항을 테스트할 때 제가 선호하는 테스트 방법은 시스템 시계를 과거 날짜로 설정한 다음 date -s '-7 days'일부 작업을 재생하고 출력 및 로그 파일을 확인한 다음 진행하는 것입니다. 날짜를 1일 단위로 지정한 다음 더 많은 작업을 재생하고, 출력과 로그를 하루 전에 확인하고, 기본적으로 필요에 따라 이를 반복합니다.

초기 조회 후 재생 작업 전에 다음 명령을 실행하여 향후 수정 날짜에 대한 로그 파일을 자릅니다.

logs=$(find /var/log -type f -mtime -0); for log in $logs; do cat /dev/null > $log; done

이렇게 하면 로그 파일이 지워지지만 실제로 원하는 것은 /var/log/서버의 현재 날짜 이후에 발생하는 하위 디렉터리() 아래에 있는 파일에서 "향후 항목"을 삭제하는 방법입니다.apache/mysql/...

로그 삭제에 도움이 되는 유틸리티/도구가 있나요?기입지금 하고 있는 것처럼 파일을 완전히 자르는 대신 미래부터 시작하세요.

저는 데비안 안정 버전을 사용하고 있습니다.

답변1

시스템이 logrorate를 사용하는 경우 logrorate -f를 사용할 수 있습니다. 그러면 모든 로그가 즉시 회전(즉, 지워짐)됩니다. logrotate(8)를 참조하십시오.

편집: 실제로 시스템은 logrotate를 영구적으로 사용할 필요가 없습니다. 이 루프 라운드에 대한 구성 파일을 준비하고 시간을 되돌린 후 실행할 수 있습니다. Logrorate의 또 다른 장점은 모든 실제 로그가 손실되지 않고 gzip으로만 압축되며 가장 오래된 gzip이 삭제된다는 것입니다.

답변2

어떤 방식으로든 로그 디렉터리의 스냅샷을 찍습니다.

귀하의 시나리오는 가상 머신에서 테스트를 실행해야 하는 것처럼 들립니다. VM의 스냅샷을 만들고 테스트를 실행한 후 테스트 결과를 얻으면 VM 상태를 삭제하고 스냅샷을 복원합니다.

가상 머신의 스냅샷을 생성하지 않고 테스트를 실행하려면 로그 디렉터리를 백업하고 백업을 복원한 후 테스트 후 syslog 데몬을 다시 시작하면 됩니다. 또는 임시로 tmpfs 파일 시스템을 마운트하고 /var/log, syslogd를 다시 시작하고, 테스트를 실행하고, 마운트 해제 /var/log하고, syslogd를 다시 시작할 수 있습니다.

관련 정보