반응형
질문
I'm using Python's logging module to log some debug strings to a file which works pretty well. Now in addition, I'd like to use this module to also print the strings out to stdout. How do I do this? In order to log my strings to a file I use following code:
import logging
import logging.handlers
logger = logging.getLogger("")
logger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
LOGFILE, maxBytes=(1048576*5), backupCount=7
)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
and then call a logger function like
logger.debug("I am written to the file")
Thank you for some help here!
답변
루트 로거에 대한 핸들을 얻고 StreamHandler
를 추가하십시오. StreamHandler
는 stderr에 작성합니다. stdout 대신 stderr을 사용해야 하는지 확실하지 않지만, Python 로거를 설정할 때 사용하는 방법이며 FileHandler
도 추가합니다. 그러면 모든 로그가 두 곳으로 전송됩니다(원하는 대로 들립니다).
import logging
logging.getLogger().addHandler(logging.StreamHandler())
stderr
대신 stdout
로 출력하려면 StreamHandler
생성자에 지정하기만 하면 됩니다.
import sys
# ...
logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
공통 헤더를 가진 모든 로그 라인에 Formatter
를 추가할 수도 있습니다.
예:
import logging
logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s")
rootLogger = logging.getLogger()
fileHandler = logging.FileHandler("{0}/{1}.log".format(logPath, fileName))
fileHandler.setFormatter(logFormatter)
rootLogger.addHandler(fileHandler)
consoleHandler = logging.StreamHandler()
consoleHandler.setFormatter(logFormatter)
rootLogger.addHandler(consoleHandler)
다음과 같은 형식으로 출력됩니다:
2012-12-05 16:58:26,618 [MainThread ] [INFO ] my message
반응형
댓글