2016-07-16 2 views
2

내가 파이썬 2.7에서 로그를 설정하는 몇 가지 코드를 가지고 인수 'W'= 파일을 덮어 쓰지 않습니다로깅 (로깅 모듈을 사용하여)의 FileHandler

import os 
import logging 
logger=logging.getLogger('CopasiTools') 
logger.setLevel(logging.DEBUG) 
log_filename=os.path.join(os.path.dirname(copasi_file),os.path.split(copasi_file)[1][:-4]+'_log.log') 
handler=logging.FileHandler(log_filename,mode='w') 
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") 
handler.setFormatter(formatter) 
logger.addHandler(handler) 
logger.debug('debugging message') 

이를 코드가 작동하고 출력을 얻고 있지만이 로그를 사용하여 많은 디버깅을 수행하므로 실행될 때마다 로그 파일을 덮어 쓰려고합니다. docs에서 'FileHandler . It doesn't specify precisely *which* mode to use for overwrite file each time but I think a reasonable assumption would be mode ='w'`에 대한 키워드 인수를 mode이라고 말하십시오. 그러나 이것은 작동하지 않습니다. 아무도 왜 저에게 말할 수 있습니까?

+0

동작을 재현 할 수 없습니다. 내가 제공 한 코드를 사용하고 파일 이름을 변경하기 만하면 코드를 실행할 때마다 로그를 덮어 씁니다. 'mode'를'a'로 변경하면 새로운 실행은 끝에 행을 추가합니다. – niemmi

+0

이것은 이상하고 이전 [질문]과 관련 될 수 있습니다. (http://stackoverflow.com/questions/38396050/why-does-this -code-for-creation-a-python-log-not-work? noredirect = 1 # comment64203174_38396050) 나는 가지고 있었다. 로깅 모듈의 기본 동작을 영구적으로 무시할 수 있는지 알고 있습니까? – CiaranWelsh

+0

나는 그것을 할 수있는 방법을 모르지만 그것은 불가능하다는 것을 의미하지는 않습니다. – niemmi

답변

1

문제는 파일이 실제로는 새로운 파이썬 쉘이 시작될 때까지 덮어 쓰지 않는다는 것입니다.

0

나는 이것에 익숙하지 않고 실제로 google에 갇혀있는 것을 보지 못했습니다. 그냥 사용 해본 적이 있습니까 :

handler=logging.FileHandler(log_filename, 'w') 
+0

고마워요,하지만 이것은 같은 방식으로 행동합니다. – CiaranWelsh