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.