2012-10-21 3 views
1

저장 변경과 설정 파일을 기록 :파이썬은 로깅 : 이제 나는 다음과 같은 설정 로그 파일이 있다고 가정 해 봅시다 위치

[loggers] 
keys=root,seeker,event 

[handlers] 
keys=consoleHandler,seekerFileHandler,eventFileHandler 

[formatters] 
keys=consoleFormatter,logFormatter 

[logger_root] 
level=DEBUG 
handlers=consoleHandler,seekerFileHandler,eventFileHandler 

[logger_seeker] 
level=DEBUG 
handlers=consoleHandler,seekerFileHandler 
qualname=seeker 
propagate=0 

[logger_event] 
level=DEBUG 
handlers=consoleHandler,eventFileHandler 
qualname=event 
propagate=0 

[handler_consoleHandler] 
class=StreamHandler 
level=INFO 
formatter=consoleFormatter 
args=(sys.stdout,) 

[handler_seekerFileHandler] 
class=FileHandler 
level=DEBUG 
formatter=logFormatter 
args=('seeker.log','a') 

[handler_eventFileHandler] 
class=FileHandler 
level=DEBUG 
formatter=logFormatter 
args=('event.log','a') 

[formatter_consoleFormatter] 
format=%(asctime)s - thread:%(thread)d - %(name)s - %(levelname)s | %(message)s 
datefmt=%m/%d/%Y %X 

[formatter_logFormatter] 
format=%(asctime)s | %(message)s 
datefmt=%m/%d/%Y %X 

일반적으로 나는 것 :

import logging 
from logging.config import fileConfig 
from os import getcwd 

fileConfig(''.join([getcwd(),'/logging.conf'])) 
event_logger = logging.getLogger("event") 
seeker_logger = logging.getLogger("seeker") 

각 로거를 처리합니다. 그러나이 소프트웨어는 Windows와 Linux의 두 가지 별도 플랫폼에서 실행되는 경향이 있으므로 각 플랫폼을 "공통"위치에 저장하면 좋을 것입니다. 어떤 아이디어

from sys import platform 
if 'win' in platform: 
    #alter the save path to this location 
if 'linux' in platform: 
    #alter save path to this location 

하지만 난 아무 생각이 어떻게 설정 파일과이를 구현하지해야한다 : 나는 무엇을 찾고 뭔가처럼?

+0

왜,'fileConfig ('logging.conf')'를 사용하지 않을까요? – nneonneo

+1

config 파일을 사용하여 선언적으로 수행 할 수 있다고 생각하지 않습니다. 따라서 각 플랫폼에 대해 가장 유사한 두 개의 구성 파일을 갖고 있으며 플랫폼에 따라로드 할 구성 파일을 선택하거나 파일 처리기 객체를 원숭이 패치합니다 올바른 대상 파일을 설정하기 위해 일반 구성을로드합니다. –

+0

... getcwd는 현재 디렉토리입니다. 실제로 아무런 요점이 없습니다 (추가 안전을 0으로 얻음). – nneonneo

답변

1

두 가지 옵션이 있습니다.

  1. 은 differents의 경로로 logging-linux.conf 파일과 logging-win.conf 파일을 사용하여 플랫폼 종속적 테스트 내부를로드합니다.

  2. 구성 파일을 사용하는 대신 FileHandler 인스턴스를 만들 때 로거 작성을 자신의 모듈에 위임하고 플레이트 폼 테스트를 만듭니다.

채택 할 솔루션은 코드의 복잡도에 따라 다릅니다. 라이브러리를 만들고 있다면이 페이지를보십시오 : http://docs.python.org/howto/logging.html#configuring-logging-for-a-library

+0

흠, 그래서 2를 섞을 방법이 없나요? 둘 중 하나는 두 개의 구성 파일을 유지하거나 구성 파일을 가지고있는 런타임 수준을 잃어 버리게 만드는 코드를 통해 모든 작업을 수행합니다 ... 오 잘 고마워요. – user747944

+1

나는 그렇게 생각하지 않는다. 나는 비슷한 문제를 겪었고, 두 가지 접근 방식을 섞어 놓은 해결책을 찾지 못했다. – Kaltezar

관련 문제