여기에 거래가 있습니다. 다중 프로세스 시스템 (사전 포크 모델, Apache와 유사)이 있습니다. 모든 프로세스가 동일한 로그 파일에 기록합니다 (실제로 요청 및 응답을 기록하는 바이너리 로그 파일이지만 상관 없습니다).다시 시작하지 않고 순환하는 로그, 다중 프로세스 문제
나는 공유 메모리 잠금을 통해 로그에 대한 동시 액세스로부터 보호하고, 파일이 특정 크기를 처음으로 로그를 롤 통지하는 과정에 도달했을 때 : 파일을 닫는
- 합니다.
- log.bin -> log.bin.1, log.bin.1 -> log.bin.2 등의 이름을 바꿉니다.
- 최대 허용 로그 수를 초과하는 로그를 삭제합니다. (예를 들어, log.bin.10)
- 여는 새로운 log.bin 파일
문제는 다른 프로세스의 이름이 변경되었다 (이전 로그 파일에 기록을 계속 인식하고, 사실에 있다는 것입니다 log.bin.1).
나는 몇 가지 솔루션을 생각할 수 : RPC의
- 어떤 종류의 로그를 다시 다른 프로세스를 통지하는 (어쩌면 신갈). 나는 특히 그것을 좋아하지 않는다.
- 프로세스가 열린 파일 스트림을 통해 파일 길이를 확인하고 파일 이름이 바뀌 었음을 감지하고 log.bin 파일을 다시 엽니 다.
아무도 내 의견으로는 매우 우아합니다.
생각? 추천?
열린 파일 (ftell/tellg)과 디스크의 현재 로그 파일 크기 사이의 길이 차이를 기반으로 회전 감지를 구현하려고합니다. 100 % 총알이 아니지만이 시나리오에서 작동해야하며 공유 메모리가 필요하지 않습니다. –
공유 뮤텍스가있는 공유 메모리를 이미 사용하고 있습니다.이 값은 100 % 글 머리 기호를 사용하는 정수 이외에 사용할 수있는 정수입니다. IMHO, 테스트 크기 차이는 임의로 작동하며 골치 거리가 날 것입니다. – Doomsday
네,하지만 사소한 boost :: interprocess :: file_lock입니다. 어쨌든, 나는 이것이 가장 효율적인 로깅과 로테이션의 결과이기 때문에 이것이 최선의 해결책이라고 생각합니다. –