2016-06-29 2 views
6

목표 : 실행될 때마다 schedule이 로깅되지 않도록 설정합니다.일정 라이브러리에서 로깅 사용 안 함

배경 : 나는 파이썬 프로젝트에서 loggingschedule 라이브러리를 사용하고

.

내 로그 파일에는 Raspberry Pi가 실행하는 계측기의 물리적 상태에 대한 정보가 들어 있으며 10 초마다 업데이트됩니다.

schedule 라이브러리를 사용하여 정기적 인 로그를 예약합니다.

Here은 내가 찾은 제한된 문서입니다 (schedule).

문제점 :

schedule 라이브러리 로그이 문장은, 때마다이 작업을 실행합니다.

2016-06-29 09:01:51,022 INFO: Running job every 10 seconds do update_log() (Last run... 

기능

schedule 그 전화는 update_log(), 로그에 포함 된 변수 I는 10 초마다 실행 계산하고 (아래 예)를 기록하는 기능입니다. 자신의 (꽤 쓸모없는) 로그 라인을 생산하고있다 schedule 때문에

2016-06-29 09:01:51,022 INFO: Dist: 12.3 m Rate: 23.8 cm/s 

, 그것은 실제로 매우 읽기 어려운 일을하려고하고 로깅을합니다.

목표 :

방지 schedule 첫 번째 문 것을 로깅에서.

+0

로그 수준을 INFO (WARNING)보다 높게 설정하고 WARNING 수준에서 로깅을 설정하는 것에 대해 어떻게 생각합니까? – bernie

+1

Btw, 나는'schedule' 모듈을 좋아합니다. – bernie

+0

그게 문제를 해결할 수 있지만 해결책보다는 오리 테이프 해킹 같은 느낌이 듭니다. 또한 비정상적인 이벤트에 대해서는 경고를 사용하지만 프로세스를 중지하는 것은 그렇게 끔찍하지는 않습니다. –

답변

5

schedule 모듈은 exclusively using the logger called schedule입니다. logging 라이브러리를 disable this logger from writing to your main logger에 사용할 수 있습니다. 전혀 schedule의 로그를 원하지 않는 경우

import logging 
logging.getLogger('schedule').propagate = False 

, 당신은 또한 설정에 따라 실제 로그 레벨 이상의 로그 수준을 비활성화 할 수 있습니다.

import logging 
logging.getLogger('schedule').setLevel(logging. CRITICAL + 10) 

python2.7 때문에, 당신은 또한 대신 NullHandler를 사용할 수 있습니다.

import logging 
logging.getLogger('schedule').propagate = False 
logging.getLogger('schedule').addHandler(logging.NullHandler()) 
+0

이것은 로그의 일정 라인을 비활성화 시키는데 효과가 있지만, 프로그램 시작시 한 번 "로거"스케줄러에 대한 핸들러를 찾을 수 없습니다. –

+0

@MichaelMolter 'schedule'의 로깅을 완전히 비활성화하는 방법에 대한 설명을 추가했습니다. – MisterMiyagi

+1

개별 로거의 우선 순위를 변경할 수 있다는 것을 알지 못했습니다. 나는 레벨을'logging.CRITICAL'로 설정하여 경고를 제거하고 여전히 치명적인 오류를 기록하도록 허용합니다. 감사! –