2013-04-09 4 views
14

콘솔과 파일에 예외를 기록하는 서버를 작성하려고합니다. 나는 요리 책에서 몇 가지 코드를 뽑았다. 여기에 있습니다 :파이썬 로깅 모듈이 파일에 아무 것도 쓰지 않습니다.

logger = logging.getLogger('server_logger') 
logger.setLevel(logging.DEBUG) 
# create file handler which logs even debug messages 
fh = logging.FileHandler('server.log') 
fh.setLevel(logging.DEBUG) 
# create console handler with a higher log level 
ch = logging.StreamHandler() 
ch.setLevel(logging.ERROR) 
# create formatter and add it to the handlers 
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') 
ch.setFormatter(formatter) 
fh.setFormatter(formatter) 
# add the handlers to logger 
logger.addHandler(ch) 
logger.addHandler(fh) 

이 코드는 콘솔에 완벽하게 기록되지만 아무 것도 파일에 기록되지 않습니다. 파일이 작성되었지만 아무것도 작성되지 않았습니다. 처리기를 닫으려고했는데 아무 것도하지 않습니다. 어느 쪽도 그것을 내뿜지 않는다. 나는 인터넷을 수색했지만 분명히이 문제가있는 유일한 사람이다. 아무도 문제가 뭔지 알 수 있습니까? 귀하의 답변에 감사드립니다.

+0

어떤 명령을 사용하여 기록 하시겠습니까? 그냥'logging.debug()'를 호출하고 있습니까? – Leopd

+0

logging.error()를 사용하고 있습니다. – thePurpleMonkey

+0

나를위한 repro 없음. 귀하의 코드는 예상대로 작동합니다. – wim

답변

16

시도 나는이 질문은 좀 너무 나이가 될 수 있음을 알고 있지만 나는 위의 방법에게 과잉의 비트를 발견

logger.error('This should go to both console and file') 

대신

logging.error('this will go to the default logger which you have not changed the config of') 
+1

오 이런! 이것은 완전히 작동하게 만들었습니다! 너는 천재 야! 나는 그것을 완벽하게 이해하지 못했지만 _why_는 그것을 작동 시켰습니다 ... – thePurpleMonkey

+5

좋은 심령 능력 – wim

+2

'logging.error'를 호출하면 구성하지 않은 기본 로거가 사용됩니다. 변수'logger'는 사용자가 설정 한 모든 속성들을 가진 첫 번째 줄에서 정의한 변수입니다. – Leopd

1

의 호출. 이 example.log에 레벨 디버깅 이상의 모든 로그를 기록합니다

import logging 

logging.basicConfig(format = '%(asctime)s %(message)s', 
        datefmt = '%m/%d/%Y %I:%M:%S %p', 
        filename = 'example.log', 
        level=logging.DEBUG) 

: 나는 유사한 문제로 실행, 나는하여 해결할 수 있었다.

logging.debug("This is a debug message")This is a debug message에서 example.log으로 작성됩니다. 이것이 작동하려면 레벨이 중요합니다.

+1

나는 OP가 내가하고 싶었던 것에 조금 과잉이라고 생각했다. 나는 당신이 일하는 코드를 만들려고 노력하고 있지만, 나를 위해 파일을 만들지는 않는다. – Mymozaaa

+0

@Mymozaaa - https://docs.python.org/2/howto/logging.html#logging-to-a-file. 나는 이것이 당신을 도울 수 있기를 바랍니다. –

1

가져 오기와 basicConfig를 스크립트의 시작 부분에 넣으십시오. 다음과 같은 내용 :

import logging 
logging.basicConfig(filename='log.log', level=logging.INFO) 
. 
. 
import ... 
import ... 
관련 문제