logging.info 이 콘솔에 표시되지 않지만 경고 및 오류가 나타납니다.
이벤트를 기록할 때logging.info
파이썬 터미널에는 나타나지 않습니다.
import logging
logging.info('I am info') # no output
이와 대조적으로 이벤트는 다음과 함께 기록됩니다.logging.warn
터미널에 나타납니다.
import logging
logging.warn('I am warning') # outputs "I am warning"
환경 수준을 변경할 수 있습니까?logging.info
콘솔에 인쇄하시겠습니까?각 Python 파일의 변경을 피하고 싶습니다.
루트 로거는 항상 경고 수준으로 기본 설정됩니다.통화해봐
logging.getLogger().setLevel(logging.INFO)
그리고 당신은 괜찮을 겁니다
@ztyx가 말한 것처럼 기본 로거 레벨은 경고입니다.더 낮은 레벨로 설정해야 합니다.
logging.basicConfig를 사용하고 로거 레벨을 설정하여 이 작업을 수행할 수 있습니다.
logging.basicConfig(level=logging.DEBUG)
위의 해결책은 저에게 효과가 없었지만, 여기 코드는 다음과 같습니다.
# 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)
(가독성을 위해 코드의 일부를 생략했습니다.)
이것은 효과가 있을 것입니다.
import logging
logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.info('its working')
최신 버전의 Python 3(Python 3.8로 테스트됨)에서는 콘솔 로깅을 사용하려면 콘솔 핸들러를 생성하여 올바르게 표시해야 합니다.info
메시지입니다.
다음 예제는 Python 설명서의 로깅 구성 예제에서 수정되었습니다.
import logging
# create logger
logger = logging.getLogger('__name__')
level = logging.INFO
logger.setLevel(level)
# ----> console info messages require these lines <----
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(level)
# add ch to logger
logger.addHandler(ch)
# -----------------------------------------------------
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
위의 코드를 실행하면 다음 출력이 생성됩니다.
info message
warn message
error message
critical message
콘솔 핸들러가 없는 동일한 코드가 있습니다.
import logging
# create logger
logger = logging.getLogger('__name__')
level = logging.INFO
logger.setLevel(level)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
콘솔 핸들러를 사용하지 않으면 출력에 다음 정보 메시지가 포함되지 않습니다.
warn message
error message
critical message
불필요한 것 같은데 왜 그런지 이해가 안 됩니다.
작동하는 모듈 레벨 로거에 필요한 최소 코드는 무엇입니까?저는 (파이썬 버전 3.8.6으로) 실험을 했습니다.
할인 혜택은 다음과 같습니다.
logging.basicConfig()
필요합니다(단, 지정).level=...
필요 없음)- 루트 로거를 구성해야 합니다.
logging.getLogger().setLevel(...)
따라서 최소 작업 예제는 다음과 같습니다.
라이브러리/모듈 코드는 로거를 구성할 필요가 없습니다.
# library/module code: lib.py
import logging
LOGGER = logging.getLogger('x.y.z')
def some_function():
LOGGER.info("hi")
애플리케이션 코드는 로거를 최소 2개의 라인으로 구성해야 합니다.
# Application Code
import logging, lib
logging.basicConfig()
logging.getLogger().setLevel(logging.INFO) # configure root logger
main() # code that will trigger lib
실험은 다음과 같습니다.
In [1]: import logging
In [2]: lg = logging.getLogger('x.y.z')
In [3]: lg.info(1)
In [4]: logging.basicConfig()
In [5]: lg.info(1)
In [6]: logging.basicConfig(level=logging.INFO)
In [7]: lg.info(1)
In [8]: logging.basicConfig()
In [9]: logging.getLogger().setLevel(logging.INFO)
In [10]: lg.info(1)
INFO:x.y.z:1
를 사용하는 사용자용absl.logging
동등한 명령어는
from absl import logging
logging.set_verbosity(logging.INFO)
Django를 사용하여 서버에 전원을 공급하는 경우 settings.py 파일의 로그 수준을 다음과 같이 변경하기만 하면 됩니다.
"handlers": {
"console": {
-- "level": "WARNING",
++ "level": "INFO",
"class": "logging.StreamHandler",
"formatter": "stackdriver",
}
},
여기 설명서의 더 많은 예: https://docs.djangoproject.com/en/4.0/topics/logging/ #configuring-discs-1
logging.info()
로그에 루트 로거를 사용합니다.
공식 문서에 따르면, 만약 당신이 로거에 대해 명시적인 핸들러를 설정하지 않는다면, 특별한 핸들러는lastResort
사용됩니다.여기 코드를 참조하십시오.기본적으로 로깅 수준:lastResort
(스트림 핸들러입니다)는 30입니다. 출력 정보 메시지로 레벨을 변경할 수 있습니다.
# setting both the logger and handler's level will work as expected.
logger.setLevel(logging.DEBUG)
logging.lastResort.setLevel(logging.DEBUG)
그러나 이것은 해킹과 같아서 결코 권장되지 않는 행동입니다.
logging.basicConfig() 사용
만약 우리가 정말 빨리 로깅을 하고 싶다면, 우리는 그 방법을 사용할 수 있습니다.
logging.basicConfig(level=logging.DEBUG)
로거가 생성됩니다.logger.level은 여기서 설정한 수준이 됩니다.NOTSET 수준의 스트림 핸들러도 생성됩니다.수준 매개 변수가 없는 경우 루트 로거의 기본 수준은 WARNING입니다.
언급
언급URL : https://stackoverflow.com/questions/11548674/logging-info-doesnt-show-up-on-console-but-warn-and-error-do
'IT' 카테고리의 다른 글
컴파일러는 함수 호출의 쉼표가 쉼표 연산자가 아님을 어떻게 알 수 있습니까? (0) | 2023.07.22 |
---|---|
어레이의 첫 번째 요소를 가져오고 Aggregate를 사용하여 반환하시겠습니까? (0) | 2023.07.17 |
tslint가 모듈을 허용하지 않는 것이 권장되는 이유는 무엇입니까? (0) | 2023.07.17 |
새(그리고 비어 있음!)를 만드는 방법"뿌리" 지점? (0) | 2023.07.17 |
스프링 부트 테스트를 특정 프로필이 활성화된 경우에만 실행되도록 표시할 수 있습니까? (0) | 2023.07.17 |