2011-04-13 1 views
3

Python의 로깅 모듈에 대한 간단한 로깅 예제를 테스트 중이었습니다.다시 실행될 때 IDLE이 로깅 모듈을 사용하여 새 로그 파일을 만드는 이유는 무엇입니까?

import logging 

logging.basicConfig(level=logging.DEBUG, 
    format='%(asctime)s %(levelname)s %(message)s', filename='TESTLOG.log') 

logging.debug('A debug message') 

예상대로 작동합니다 : TESTLOG.log라는 파일이 디버그 메시지와 함께 생성됩니다.

IDLE 스크립트 창이 열려있는 동안 로그 파일을 삭제하면/f5 모듈을 다시 실행하려고하면 새 로그 파일이 만들어지지 않습니다. 스크립트 창을 닫은 다음 다시 열고 실행하면 로그 파일이 만들어집니다.

반대로, 명령 줄에서 스크립트를 실행하면 로그 파일을 삭제하고 스크립트를 다시 실행 한 후에 로그 파일이 항상 생성됩니다.

두 가지 상황의 차이점은 무엇입니까?

답변

1

처음으로 basicConfig을 호출하면모듈의 루트 로거에 Handler이 추가됩니다. 이후에 basicConfig을 호출하면 루트 로거에 Handler가 이미 있는지 확인하고 basicConfig에 대한 호출이없는 경우 (즉, 로그 파일을 다시 만들지 않음)

IDLE 창을 열고 스크립트를 실행하면 로깅 모듈이로드되고 스크립트는 basicConfig을 호출하여 루트 로거를 구성합니다. 이후에 IDLE 창을 닫지 않으므로 로깅 모듈은 계속로드되고 이후 basicConfig에 대한 호출은 아무 효과가 없습니다.

IDLE 윈도우를 닫았다가 다시 열면 효과적으로 파이썬의 새 인스턴스가 시작되고 로깅 모듈을 다시로드해야하므로 basicConfig에 대한 호출이 적용됩니다. 마찬가지로 명령 행에서 스크립트를 실행하려면 스크립트가 실행될 때마다 python의 새로운 인스턴스가 필요합니다.

+0

감사합니다. 그것은 의미가 있으며 로깅 모듈을 더 잘 이해할 수 있도록 도와줍니다. – monkeylytics

0

현재 운영 체제가 어떤 버전인지는 모르겠지만 Windows에서 열린 파일을 삭제할 수 없기 때문에 Windows가 아닌 것 같습니다. Linux에서 파일 을 열 수 있지만 열려있는 모든 핸들이 닫힐 때까지 파일이 멈추고 사라집니다. 이는 IDLE 프로세스가 종료 될 때까지 IDLE의 경우 파일이 IDLE이 실행되는 동안 열린 상태로 유지되므로 파일을 삭제했지만 실제로 그대로 남아 있습니다. 스크립트의 경우 매번 종료되므로 파일이 닫히고 삭제하면 삭제됩니다.

관련 문제