2014-04-17 3 views
1

모든 웹 응용 프로그램 로그에 사용자 전자 메일을 추가하고 싶습니다.스레드 로컬에서 파이썬 로깅

쿠키 (예 : 쿠키 등)를 threading.local()에 저장할 수 있습니다. 하지만 변수가 스레드 로컬에 항상 있는지 확신 할 수는 없습니다.

내 애플 리케이션의 모든 로거가 그렇게 행동한다고 ​​말하는 방법이 있습니까?

답변

1

스레드 로컬 변수 (또는 스레드가 없을 때 적절한 기본값)를 잡고 로그 레코드에 추가하는 logging.Filter() 개체를 만들 수 있습니다. 해당 필터를 루트 로그 작성기에 첨부하면 핸들러로 전달되기 전에 모든 로그 레코드에 대해 호출됩니다. 변수가 로그 레코드에 있으면 정보를 표시하고 저장하는 데 사용하는 형식 기에서 변수를 사용할 수 있습니다.

+0

당신의 기본 아이디어는 건전하지만 구현은 불행히도 그렇게 할 수 없습니다. 왜냐하면 [descendant logger에 의해 생성 된 이벤트는 logger의 필터 설정에 의해 필터링되지 않기 때문입니다.] (https : //docs.python. org/2/library/logging.html # filter-objects) (즉, 루트 로거의 필터는 비 루트 로거 이벤트에 대해 실행되지 않습니다). 해당 주제에 대한 더 깊은 토론은 [이 SO 질문] (http://stackoverflow.com/questions/6850798/why-doesnt-filter-attached-to-the-root-logger-propagate-to-descendant-loggers)을 참조하십시오. . –