python logging 중복 로그 쓰기 문제 해결 방법 상세 설명
Python 의 logging 모듈 로 로 그 를 기록 할 때 로 그 를 중복 기록 하 는 문제 가 발생 했 습 니 다.첫 번 째 기록 은 한 번 쓰 고 두 번 째 기록 은 두 번 쓰 며 세 번 째 기록 은 세 번 씁 니 다.골 치 아파,이렇게 일 지 를 적어 서 는 안 돼.인터넷 에서 원인 과 해결 방안 을 검색 했다.
이유:handler 를 제거 하지 않 았 습 니 다.
해결:로그 기록 이 끝 난 후 removeHandler
이전 예제 코드 수정:
import logging
def log(message):
logger = logging.getLogger('testlog')
streamhandler = logging.StreamHandler()
streamhandler.setLevel(logging.ERROR)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
streamhandler.setFormatter(formatter)
logger.addHandler(streamhandler)
logger.error(message)
if __name__ == '__main__':
log('hi')
log('hi too')
log('hi three')
수정 전 출력 결과:2016-07-08 09:17:29,740 - ERROR - testlog - hi
2016-07-08 09:17:29,740 - ERROR - testlog - hi too
2016-07-08 09:17:29,740 - ERROR - testlog - hi too
2016-07-08 09:17:29,740 - ERROR - testlog - hi three
2016-07-08 09:17:29,740 - ERROR - testlog - hi three
2016-07-08 09:17:29,740 - ERROR - testlog - hi three
수정 후 예제 코드:
import logging
def log(message):
logger = logging.getLogger('testlog')
streamhandler = logging.StreamHandler()
streamhandler.setLevel(logging.ERROR)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
streamhandler.setFormatter(formatter)
logger.addHandler(streamhandler)
logger.error(message)
# ,
logger.removeHandler(streamhandler)
if __name__ == '__main__':
log('hi')
log('hi too')
log('hi three')
수정 후 출력 결과:2016-07-08 09:32:28,206 - ERROR - testlog - hi
2016-07-08 09:32:28,206 - ERROR - testlog - hi too
2016-07-08 09:32:28,206 - ERROR - testlog - hi three
깊이 분석:
Google 에 서 는 두 번 째 로 로 그 를 호출 할 때 getLogger(name)의 name 에 따라 같은 logger 를 가 져 왔 다 는 것 을 알 게 되 었 습 니 다.이 logger 에는 처음으로 추가 한 handler 가 있 고 두 번 째 호출 에 handler 가 추가 되 었 기 때문에 이 logger 에는 같은 handler 가 두 개 있 습 니 다.이런 식 으로 몇 번 호출 하면 handler 가 몇 개 있 습 니 다.
그래서 여기 에는 다음 과 같은 몇 가지 해결 방법 이 있다.
방법 3:
import logging
def log(message):
logger = logging.getLogger('testlog')
# , logger.handlers , , ,
if not logger.handlers:
streamhandler = logging.StreamHandler()
streamhandler.setLevel(logging.ERROR)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
streamhandler.setFormatter(formatter)
logger.addHandler(streamhandler)
logger.error(message)
if __name__ == '__main__':
log('hi')
log('hi too')
log('hi three')
방법 4:
import logging
def log(message):
logger = logging.getLogger('testlog')
streamhandler = logging.StreamHandler()
streamhandler.setLevel(logging.ERROR)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
streamhandler.setFormatter(formatter)
logger.addHandler(streamhandler)
logger.error(message)
# pop logger.handlers handler , add handler, pop, handlers
logger.handlers.pop()
# logger.handler = []
if __name__ == '__main__':
log('hi')
log('hi too')
log('hi three')
이 몇 가지 방법 은 모두 직접 시험 해 볼 수 있 는데,개인 적 으로 방법 3 판단 이 더욱 우아 하 다 고 생각 합 니 다.어떻게 생각 하 세 요?python logging 중복 로그 문제 j 해결 방법 에 대한 자세 한 설명 은 여기까지 입 니 다.더 많은 관련 python logging 중복 로그 문제 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.