2012-08-24 4 views
0

로그 통합 자 프로그램을 작성 중입니다. 즉, 로그를 생성하는 시스템이 있습니다. my.log, my.log.1, my.log.2, my.log.3 ...파일 - 유닉스 - 로그 파일에 1 : 1로 대응

각 반복마다 저장하려는 내가 특정 파일에서 읽은 라인. 그래서 다음 반복에서 그 위치에서 계속 읽을 수 있습니다.

문제는 파일이 가득 할 때, 그들은 롤이다 : 마지막 로그가 삭제 ... my.log.2는 my.log.3 my.log.1이 my.log하게된다. 2 my.log는 my.log.1 되고 새로운 my.log는

내가 inode를 사용하여, 그들을 추적을 당연히 유지할 수 생성 - 거의 파일에 일대일 대응이다. 일부 파일 (의 로깅은 매우 빠르고 가정 해 봅시다)을 삭제하고 새로운 파일을 생성하며, 일부는 아이 노드를 가지고있다 - 내 반복 둘 사이를 : 나는 다음과 같은 시나리오에 대한 두려움 때문에 나는, "거의"라고

방금 삭제 된 파일 이제 문제는 -이 파일을 오래된 파일로 착각하여 0 대신에 500 행 (예를 들어)을 읽는 것입니다.

그래서이 문제를 해결하기위한 방법을 찾고 싶습니다. 여기에 몇 가지 지침이 있습니다. 아이 노드가 아닌 다른

  1. 어느 다른 1 대 1 대응을 : 당신이 나를 도울 수 있도록 수 - 나에 대해 생각했다.

  2. 파일을 표시 할 수있는 기능. chmod + x를 사용하여 파일을 기존 파일로 표시하고 이러한 사용 권한이없는 새 파일에 대해 생각했습니다. 새 파일임을 알 수 있습니다. 그러나 누군가 수동으로 사용 권한을 변경하면 내 파일을 혼동하게됩니다. 프로그램. 그래서 다른 방법으로 표를하면.

  3. 파일을 삭제할 때 삭제되는 파일에 대한 소프트 링크를 만드는 방법을 생각했습니다. 그러면 어떤 파일이 삭제되었는지 알 수 있습니다.

  4. 은 "만든 날짜"

  5. 마음에 오는 모든 아이디어를 얻을 수있는 방법 -만큼 그들은 것 등 모두가 좋은 것 - 어쩌면 일부 영리한 방법으로 타임 스탬프에 atime, ctime이,에 mtime을 사용하여 어떤 파일이 새로운 것인지 또는 파일과 일대일 대응을 만드는 아이디어를 알려줍니다.

답변

1

나는 몇 가지 대안을 생각할 수 있습니다 감사합니다

  • 사용 POSIX extended attributes 당신의 프로그램이 작업에 사용할 수있는 각 로그 파일에 대한 메타 데이터를 저장합니다.

  • 이전 로그 파일의 내용을 보관 한 후에 수정하지 말아야합니다. 즉, my.logmy.log.1이 된 후에 보관해야합니다. 각 파일 (예 : SHA-256)의 해시를 생성하여 고유하게 식별 할 수 있습니다.

  • 모든 알맞은 로그 형식은 각 항목에 타임 스탬프를 포함합니다.식별을 위해 파일에서 첫 번째 항목의 타임 스탬프 또는 심지어 전체 항목 자체를 사용할 수 있습니다. 로그 파일은 일반적으로 주기적으로 롤링되므로 각 파일에 대한 시작 시간 소인이 달라집니다.