2017-12-02 11 views
1

여러 개의 모듈 -파이썬 로깅 - 나는 다음과 같은 구조가 작은 파이썬 프로젝트에서 일하고 있어요

project 
-- logs 
-- project 
    __init.py__ 
    classA.py 
    classB.py 
    utils.py 
-- main.py 

다음과 같이 내가 프로젝트에서 __init.py__에서 로깅 구성을 설정 한을 :

import logging 
from logging import StreamHandler 
from logging.handlers import RotatingFileHandler 

# Create the Logger 
logger = logging.getLogger(__name__) 
logger.setLevel(logging.INFO) 

# Create the Handler for logging data to a file 
logger_handler = RotatingFileHandler('logs\\mylog.log', maxBytes=1024, backupCount=5) 
logger_handler.setLevel(logging.INFO) 

#Create the Handler for logging data to console. 
console_handler = StreamHandler() 
console_handler.setLevel(logging.INFO) 

# Create a Formatter for formatting the log messages 
logger_formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s') 

# Add the Formatter to the Handler 
logger_handler.setFormatter(logger_formatter) 
console_handler.setFormatter(logger_formatter) 

# Add the Handler to the Logger 
logger.addHandler(logger_handler) 
logger.addHandler(console_handler) 

이런 식으로 물건을 설치하는 것은 루트 레벨을 전체 프로젝트 레벨이 아닌 패키지 레벨에서 설정하는 것 같습니다. 결과적으로 로그 파일에 main.py의 로그 된 문은 로그 파일에 나타나지 않고 classAclassButils.py의 모든 로그 문은 콘솔과 로그 파일로 예상대로 라우팅됩니다.

로깅을 설정하여 한 번 구성하고 프로젝트 전체에서 사용할 수있게하려면 어떻게해야합니까? 로깅 구성 문을 main.py로 이동하려고 시도했지만 작동하지 않았습니다.

답변

1

로깅을 전체 프로젝트에 대해 한 번만 구성하십시오. 처음 시도했을 때와 마찬가지로 별도로 각 패키지가 필요합니다. 당신은 현재 모듈에 대한 로거를 구성 잘못 했는가

다음에 대해 수행

root_logger = logging.getLogger() 
root_logger.setLevel(logging.INFO) 

# ... 

root_logger.addHandler(logger_handler) 
root_logger.addHandler(console_handler) 

구성 대신 그

logger = logging.getLogger(__name__) 

, 당신은 루트 로거를 구성 할 루트 로거는 명시 적으로 무시하지 않는 모든 로거에 적용됩니다. 실제로 로그인 할 때

그런 다음 특정 로거를 사용해야합니다 어드바이스에 대한

logger = logging.getLogger(__name__) 

logger.warning("I am warning you about %s", something) 
+0

안녕하세요, 감사합니다. 그것은 효과가있다! 그래도 후속 질문이 있습니다. 이 방법으로 루트 로거를 설정하면 가져온 다른 모듈의 수준을 설정 한 것 같아요. 이제 로그 파일에 제 3 자 가져온 모듈의 메시지를 가져 오는 중입니다. 필자가 작성한 모듈의 메시지 만 기록하려면 어떻게합니까? – theguyoverthere

+0

각 레벨을 설정할 수 있습니다. 여기에서 레벨을 설정할 수 있습니다. 'logging.getLogger ("product"). setLevel (logging.INFO)'또는'logging.getLogger ("numpy"). setLevel (logging.DEBUG)'를 호출합니다. 로그 구성 파일을 사용하는 것이 더 쉬울 수도 있지만 (https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig) – zvone