logging.info가 콘솔에 표시되지 않지만 경고 및 오류가 발생합니다.


94

로 이벤트를 기록 logging.info하면 Python 터미널에 표시되지 않습니다.

import logging
logging.info('I am info')  # no output

반대로 logging.warndo로 기록 된 이벤트 는 터미널에 나타납니다.

import logging
logging.warn('I am warning')  # outputs "I am warning"

logging.info콘솔에 인쇄 할 수있는 환경 수준 변경이 있습니까? 각 Python 파일을 변경하지 않으려 고합니다.

답변:


157

루트 로거는 항상 경고 수준으로 기본 설정됩니다. 전화 해보세요

logging.getLogger().setLevel(logging.INFO)

그리고 당신은 괜찮을 것입니다.


1
아니요, 한 번만 전화하면됩니다. 로거는 계층 구조로 구축되며 모든 로깅은 루트 로거 로 귀결됩니다 . 에 인수를 지정하지 않으면 getLogger()루트 로거가 반환됩니다. 다른 로거를 수정하지 않는 한 루트 로거 만 수정하면됩니다.
Ztyx 2012 년

18
logging.basicConfig (level = logging.INFO)가 작동하지 않는 이유를 알고 있습니까? 문서에서 명확하게 볼 수 없습니다.
Doppelganger 2012

1
@ P1h3r1e3d13 최선의 방법으로 사용할 수있는 단일 루트 로거 만 있다면 그렇습니다.
Ztyx

7
이것은 Python 3.5에서 작동하지 않습니다 :Python 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] on linux >>> import logging >>> rootLog = logging.getLogger() >>> rootLog.setLevel(logging.INFO) >>> rootLog.info('all the kings horses') >>> rootLog.warning('all the kings men') all the kings men
Jeff K

6
@jeffk, 저와 동일 3.6.8은 setLevel이 logging.INFO로 설정되어 있어도 정보 메시지를 인쇄하지 않습니다.
Robert Lugg

28

@ztyx가 기본 로거 수준이 경고라고 말했듯이. 더 낮은 수준으로 설정해야합니다

logging.basicConfig 를 사용 하고 로거 수준을 설정 하여 수행 할 수 있습니다 .

logging.basicConfig(level=logging.DEBUG)

7
적절하게 작동 basicConfig()하지만 왜 나를 위해 작동하지 않는지 궁금 logging.getLogger().setLevel()합니다.
Shayan Amani 19

17

위의 솔루션은 저에게 효과적이지 않았지만 여기 의 코드는 다음과 같이 작동했습니다 .

# set up logging to file
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='/temp/myapp.log',
                    filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# add the handler to the root logger
logging.getLogger('').addHandler(console)

(가독성을 위해 코드의 일부를 생략했습니다)


1
이것은 나를 위해 일한 유일한 것입니다. 나는 함께 라인을 가지고 logging.error("Connection timed out!")심지어와 level=logging.DEBUG에서 basicConfig(),이 콘솔에 인쇄하지 않을 것입니다. 처리기를 추가하면 정말 감사합니다 !!
BruceWayne

사용중인 핸들러가 역할을하고 있음을 기억하십시오. 예를 들어 코드에 NullHandler가있는 경우 로깅 레버에 관계없이 아무것도 인쇄되지 않습니다.
조지

여기에서도 동일합니다. 레벨 인수를 생략 basicConfig하거나 INFO 위에 설정하면 콘솔 로거는 아무것도 기록하지 않습니다. 내가 나가면 하루 종일 로거를 basicConfig호출 setLevel할 수 getEffectiveLevel있지만 (그리고를 호출하여 레벨 변경을 볼 수 있습니다 ) WARNING레벨 이하의 항목은 기록하지 않습니다 . 나는 그것이 올바른 행동이 아니라고 확신하지는 않지만 내가 기대했던 것이 아닙니다.
Hal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.