2012-10-26 5 views
0

내가 다른 웹 사이트에 대한 여러 가지 파서를 가지고, 나는 또한 LXML에게 특별한 구문 분석 기능과 base.py있다 shared.py라는 파일이 데이터베이스 (저장 및 기타)를 관리하는 파일. 무언가가 실패했거나 (이미지가 발견되지 않았거나) 이미지가 발견되면 로그 파일에 로그해야합니다. 표준 로깅 모듈을 사용하고 있습니다.파이썬 로깅 - 다른 로그하지만 같은 출력

나는 내가 너무 내 파서 또는 base.py/shared.py이를 호출 할 수있는 로그 클래스를 만들 logger.py 파일을 작성 한 파일은 다음과 같습니다

import logging 
import os.path 

__metaclass__ = type 

class Log: 
    def __init__(self, filename, loggername="fetchers", path="logs/", formater="%(asctime)s %(levelname)s %(message)s"): 
     self.logger = logging.getLogger(loggername) 
     self.hdlr = logging.FileHandler(path + os.path.splitext(filename)[0] + ".log") 
     self.formater = logging.Formatter(formater) 
     self.hdlr.setFormatter(self.formater) 
     self.logger.addHandler(self.hdlr) 
     self.logger.setLevel(logging.INFO) 
    def info(self, msg): 
     self.logger.info(msg) 
    def warning(self, msg): 
     self.logger.warning(msg) 
    def error(self, msg): 
     self.logger.error(msg) 
    def critical(self, msg): 
     self.logger.critical(msg) 

if __name__ == "__main__": 
    pass 

폴더 계층 구조는 다음과 같습니다.

  • /파서
  • /Parsers/base.py
  • /Parsers/shared.py
  • /Parsers/parserone.py
  • /Parsers/parsertwo.py
  • /파서/parsersthree.py
  • /파서/...
  • /Parsers/logs/base.log
  • /Parsers/logs/shared.log
  • /Parsers.logs/parserOne.log

모든 파서는 로거 파일 (base.py도 shared.py)를 수입하고 이런 로거를 초기화 :

logger = Log(os.path.basename(__file__)) 
logger.warning("Something has happened..") 

이이 로그에 기록 않는, 잘 작동하지만 문제는, base.py 쿼리 등, 그리고 실패에 대한 파서 등 (shared.py와 같은) [정보 로그를 기록 문제는 로그를 쓰고 있지만 모두 똑같은 것처럼 보입니다.

➜ logs tail parserOne.log 
2012-10-26 16:35:21,250 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/scherpe-omzetdaling-televisiereclame/ 
2012-10-26 16:35:21,286 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/nominaties-mercurs-bekend2/ 
2012-10-26 16:35:21,322 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/traditionele-media-nog-steeds-populair-bij-jongeren/ 
2012-10-26 16:35:21,371 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/persgroep-blijft-sponsor-san/ 
2012-10-26 16:35:21,407 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/pg-overtreft-verwachtingen/ 
2012-10-26 16:35:21,443 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/discovery-networks-introduceert-discovery-client-productions/ 
2012-10-26 16:35:21,479 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/stoelendans-bij-wehkamp.nl/ 
2012-10-26 16:35:21,563 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/amazon-duikt-in-rode-cijfers/ 
2012-10-26 16:35:21,599 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/linkedin-rabobank-meest-populaire-werkgever/ 
2012-10-26 16:35:21,683 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/veronica-uitgeverij-wil-naar-amsterdam/ 

➜ logs tail base.log 
2012-10-26 16:35:21,250 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/scherpe-omzetdaling-televisiereclame/ 
2012-10-26 16:35:21,286 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/nominaties-mercurs-bekend2/ 
2012-10-26 16:35:21,322 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/traditionele-media-nog-steeds-populair-bij-jongeren/ 
2012-10-26 16:35:21,371 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/persgroep-blijft-sponsor-san/ 
2012-10-26 16:35:21,407 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/pg-overtreft-verwachtingen/ 
2012-10-26 16:35:21,443 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/discovery-networks-introduceert-discovery-client-productions/ 
2012-10-26 16:35:21,479 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/stoelendans-bij-wehkamp.nl/ 
2012-10-26 16:35:21,563 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/amazon-duikt-in-rode-cijfers/ 
2012-10-26 16:35:21,599 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/linkedin-rabobank-meest-populaire-werkgever/ 
2012-10-26 16:35:21,683 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/veronica-uitgeverij-wil-naar-amsterdam/ 

➜ logs tail shared.log 
2012-10-26 16:35:21,250 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/scherpe-omzetdaling-televisiereclame/ 
2012-10-26 16:35:21,286 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/nominaties-mercurs-bekend2/ 
2012-10-26 16:35:21,322 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/traditionele-media-nog-steeds-populair-bij-jongeren/ 
2012-10-26 16:35:21,371 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/persgroep-blijft-sponsor-san/ 
2012-10-26 16:35:21,407 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/pg-overtreft-verwachtingen/ 
2012-10-26 16:35:21,443 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/discovery-networks-introduceert-discovery-client-productions/ 
2012-10-26 16:35:21,479 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/stoelendans-bij-wehkamp.nl/ 
2012-10-26 16:35:21,563 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/amazon-duikt-in-rode-cijfers/ 
2012-10-26 16:35:21,599 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/linkedin-rabobank-meest-populaire-werkgever/ 
2012-10-26 16:35:21,683 INFO Data was sucessfuly saved: http://www.adformatie.nl/nieuws/bericht/veronica-uitgeverij-wil-naar-amsterdam/ 

모든 로그 파일이 같은 이유는 무엇입니까? 다른 파일이라면?!

건배.

+0

@ 라 나루 당신 말이 맞아요, 당신이 말한대로 저를 고쳤습니다. –

+0

굉장 해요, 대답으로 내 의견을 올렸습니다. 이 문제를 해결하려면 동의하십시오. 감사! – Lanaru

답변

1

. 따라서 출력이 동일한 이유를 설명하는 모든 곳에서 동일한 로거를 사용하고 있습니다.

1

로거를 모두 "fetcher"라고 부릅니다 (사용자가 loggername 인수를 제공하지 않았기 때문에). 따라서 모든 로그에 동일한 메시지가 나타납니다.

로거에 이름을 추가하고 아마도 filters을 사용하는 것이 좋습니다. 다음과 같이

당신은 당신의 코드에 이것을 적용 할 수 있습니다 : 그것은 그것의 loggerName를 사용하여 로거를 받고처럼 보이는, 그리고 항상 "fetchers"로 설정되어

logger = Log(os.path.basename(__file__), loggername='test') 

def __init__(self, filename, loggername="fetchers", path="logs/", formater="%(asctime)s %(levelname)s %(message)s"): 
    self.logger = logging.getLogger(loggername) 
    self.hdlr = logging.FileHandler(path + os.path.splitext(filename)[0] + ".log") 
    self.hdlr.addFilter(logging.Filter(name=loggername)) 
    ... 
+0

이 고정 또한, 당신과 Lanaru는 대답을 게시, 나는 둘 다 받아 들일 수 없기 때문에, 나는 개인적으로 둘 다 받아 들일 수 있지만, 첫 번째 하나를 받아 들였습니다 ;-) 감사합니다! –

+0

@BenMezger 걱정하지 마세요, 기꺼이 도와주세요! :) –