2015-01-23 7 views
0

RotatingFileHandler를 사용하여 파이썬으로 회전 파일 로거를 만들 수 있습니다. 파일 수를 10으로 설정하고 각 파일 크기를 1MB로 설정했습니다. 내 질문은 회전이 발생하는 방식과 관련이 있습니다. 모든 파일을 열어서 각 파일의 내용을 수정하고 행이 최신 파일에 추가 될 때마다 회전이 이루어 지나요? 그렇다면 항상 열리는 파일 설명자가 10 개 이상 있어야합니다.파이썬에서 RotatingFileHandler logger가 몇 개의 파일 디스크립터를 열었습니까?

각 파일에 100KB 청크 행이 있다고 가정하면 각 파일의 행은 10 행뿐입니다. 그래서이 회전 로그 처리기를 통해 다른 행 (100KB)이 삽입되면 각 파일의 마지막 행을 다음 파일의 맨 위에 놓지 않을 것인가? 그래서 항상 모든 파일 기술자를 열어 두는 것이 합리적이지 않습니까?

답변

1

핸들러에는 열려있는 파일이 하나뿐입니다. 회전 할 때 다른 파일은 으로 바뀌 었습니다..

먼저 현재 파일이 닫힙니다. 그런 다음, rotation은 파일의 이름을 역순으로 바꿉니다. 확장자가 .9 인 파일은 먼저 .10으로 이름이 바뀌어 이미 존재하는 .10을 삭제합니다. 그런 다음 .8의 이름이 .9으로 변경됩니다. 마지막으로 '현재'파일의 이름이 바뀌어 .1 확장자가 추가됩니다.

delay 플래그에 따라 회전하거나 다음 로그 항목을 쓸 때 끝에 새 파일이 열립니다.

이 모든

크기 초과 되려고 included in the logging.handlers.RotatingFileHandler() documentation은 파일이 닫혀 있고 새로운 파일이 자동으로 출력을 위해 개방된다. [...] backupCount이 0이 아니면 시스템은 파일 이름에 확장자 '.1', '.2'등을 추가하여 이전 로그 파일을 저장합니다. 예를 들어, backupCount이 5이고 기본 파일 이름이 app.log 인 경우 app.log, app.log.1, app.log.2, 최대 app.log.5이됩니다. 기록되는 파일은 항상 app.log입니다. 이 파일이 채워지면 닫히고 app.log.1으로 이름이 바뀌고 app.log.1, app.log.2 등이있는 경우 각각 app.log.2, app.log.3 등으로 이름이 바뀝니다.

+0

감사합니다.이 회전하는 파일 핸들러에 Logger.removeHandler (..)를 호출하지 않으면 어떻게됩니까? 오픈 파일 디스크립터에 대한 가비지 수집이 궁극적으로 발생합니까? – Ouroboros

+0

@ P.Prasad : 예, 핸들러를 더 이상 참조하지 않으면 열린 파일 객체와 함께 객체가 지워집니다. –