programing

IPthon 노트북의 로깅 모듈에서 출력 가져오기

starjava 2023. 6. 16. 21:17
반응형

IPthon 노트북의 로깅 모듈에서 출력 가져오기

IPython 노트북에서 다음을 실행하면 출력이 표시되지 않습니다.

import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")

노트북 안에 있는 "테스트" 메시지를 볼 수 있도록 만드는 방법을 아는 사람?

다음을 시도해 보십시오.

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test")

logging.basicConfig에 따라:

기본 포맷터를 사용하여 StreamHandler를 만들고 루트 로거에 추가하여 로깅 시스템에 대한 기본 구성을 수행합니다.루트 로거에 대해 정의된 핸들러가 없는 경우 debug(), info(), warning(), error() 및 critical() 함수는 basicConfig()를 자동으로 호출합니다.

루트 로거에 이미 구성된 핸들러가 있는 경우 이 기능은 아무 동작도 하지 않습니다.

ipython 노트북이 어딘가에서 basicConfig(또는 set handler)를 호출하는 것 같습니다.

그래도 사용하려면basicConfig로깅 모듈을 이렇게 다시 로드합니다.

from importlib import reload  # Not needed in Python 2
import logging
reload(logging)
logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s', level=logging.DEBUG, datefmt='%I:%M:%S')

IPython 세션이 로깅을 시작하여 basicConfig가 작동하지 않는 것으로 알고 있습니다.다음은 제게 맞는 설정입니다(거의 모든 노트북에 사용하고 싶기 때문에 이 설정이 그렇게 징그럽지 않았으면 합니다).

import logging
logger = logging.getLogger()
fhandler = logging.FileHandler(filename='mylog.log', mode='a')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fhandler.setFormatter(formatter)
logger.addHandler(fhandler)
logger.setLevel(logging.DEBUG)

이제 내가 실행할 때:

logging.error('hello!')
logging.debug('This is a debug message')
logging.info('this is an info message')
logging.warning('tbllalfhldfhd, warning.')

다음이 포함된 "mylog.log" 파일을 노트북과 동일한 디렉토리에 가져옵니다.

2015-01-28 09:49:25,026 - root - ERROR - hello!
2015-01-28 09:49:25,028 - root - DEBUG - This is a debug message
2015-01-28 09:49:25,029 - root - INFO - this is an info message
2015-01-28 09:49:25,032 - root - WARNING - tbllalfhldfhd, warning.

IPython 세션을 다시 시작하지 않고 이를 다시 실행하면 파일 핸들러가 두 개 정의되므로 중복 항목이 파일에 기록됩니다.

stderr은 기본 스트림입니다.logging모듈. 따라서 IPython 및 Jupyter 노트북에서는 stdout으로 스트림을 구성하지 않으면 아무것도 볼 수 없습니다.

import logging
import sys

logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s',
                     level=logging.INFO, stream=sys.stdout)

logging.info('Hello world!')

지금 나에게 도움이 된 것(Jupiter, 노트북 서버: 5.4.1, IPython 7.0.1)

import logging
logging.basicConfig()
logger = logging.getLogger('Something')
logger.setLevel(logging.DEBUG)

이제 로거를 사용하여 정보를 인쇄할 수 있습니다. 그렇지 않으면 기본 수준의 메시지만 표시됩니다.logging.WARNING) 이상.

다음을 실행하여 로깅을 구성할 수 있습니다.%config Application.log_level="INFO"

자세한 내용은 IPython 커널 옵션을 참조하십시오.

로깅 버전 3.8 a 기준force기존 핸들러를 제거하는 매개 변수가 추가되었습니다. 이 매개 변수는basicConfig일하기 위해.이것은 IPython 버전 7.29.0 및 Jupyter Lab 버전 3.2.1에서 작동했습니다.

import logging
logging.basicConfig(level=logging.DEBUG,
                    force = True)
logging.debug("test")

두 파일 모두 로거를 설정했는데 노트북에 표시되기를 원했습니다.파일 처리기를 추가하면 기본 스트림 처리기가 지워집니다.

logger = logging.getLogger()

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# Setup file handler
fhandler  = logging.FileHandler('my.log')
fhandler.setLevel(logging.DEBUG)
fhandler.setFormatter(formatter)

# Configure stream handler for the cells
chandler = logging.StreamHandler()
chandler.setLevel(logging.DEBUG)
chandler.setFormatter(formatter)

# Add both handlers
logger.addHandler(fhandler)
logger.addHandler(chandler)
logger.setLevel(logging.DEBUG)

# Show the handlers
logger.handlers

# Log Something
logger.info("Test info")
logger.debug("Test debug")
logger.error("Test error")

저는 이것에 대한 간단하고 간단한 대답과 멋진 스타일의 출력을 원했기 때문에 여기 제 추천이 있습니다.

import sys
import logging

logging.basicConfig(
    format='%(asctime)s [%(levelname)s] %(name)s - %(message)s',
    level=logging.INFO,
    datefmt='%Y-%m-%d %H:%M:%S',
    stream=sys.stdout,
)
log = logging.getLogger('notebook')

그러면 사용할 수 있습니다.log.info()또는 다음과 같은 출력을 가진 노트북의 다른 로깅 수준

2020-10-28 17:07:08 [INFO] notebook - Hello world
2020-10-28 17:12:22 [INFO] notebook - More info here
2020-10-28 17:12:22 [INFO] notebook - And some more

세우다

import logging

# make a handler
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# add it to the root logger
logging.getLogger().addHandler(handler)

사용자 자신의 로거에서 로그

# make a logger for this notebook, set verbosity
logger = logging.getLogger(__name__)
logger.setLevel('DEBUG')

# send messages
logger.debug("debug message")
logger.info("so much info")
logger.warning("you've veen warned!")
logger.error("bad news")
logger.critical("really bad news")
2021-09-02 18:18:27,397 - __main__ - DEBUG - debug message
2021-09-02 18:18:27,397 - __main__ - INFO - so much info
2021-09-02 18:18:27,398 - __main__ - WARNING - you've veen warned!
2021-09-02 18:18:27,398 - __main__ - ERROR - bad news
2021-09-02 18:18:27,399 - __main__ - CRITICAL - really bad news

다른 라이브러리에서 로깅 캡처

logging.getLogger('google').setLevel('DEBUG')

from google.cloud import storage

client = storage.Client()
2021-09-02 18:18:27,415 - google.auth._default - DEBUG - Checking None for explicit credentials as part of auth process...
2021-09-02 18:18:27,416 - google.auth._default - DEBUG - Checking Cloud SDK credentials as part of auth process...
2021-09-02 18:18:27,416 - google.auth._default - DEBUG - Cloud SDK credentials not found on disk; not using them
...

언급URL : https://stackoverflow.com/questions/18786912/get-output-from-the-logging-module-in-ipython-notebook

반응형