Регистриране на Python - различни регистрационни файлове, но един и същ изход

Имам няколко различни анализатора за различни уебсайтове, имам и файл, наречен shared.py, който има функциите lxml за специалното анализиране и base.py< /em> файл, който се грижи за базата данни (запазване и други). Ако нещо се е провалило (няма намерено изображение) или е преминало (ние намерихме изображение), трябва да регистрирам това в лог файл, за това използвам стандартния модул за регистриране.

Написах файл logger.py, където създавам клас Log, за да мога да го извикам в моите анализатори или base.py/shared.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
  • /Parsers/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/

Защо всички регистрационни файлове са еднакви? Ако са различни файлове?!

наздраве


person Community    schedule 26.10.2012    source източник
comment
@Lanaru Прав си, това, което каза, го поправи за мен.   -  person    schedule 26.10.2012
comment
Страхотно, публикувах коментара си като отговор. Моля, приемете го, за да разрешите този въпрос. Благодаря!   -  person Lanaru    schedule 26.10.2012


Отговори (2)


Изглежда, че регистраторът се получава с помощта на loggerName и това винаги е настроено на "fetchers". Така че използвате един и същ регистратор навсякъде, което обяснява защо изходът е същият.

person Lanaru    schedule 26.10.2012

Всичките ви регистратори се наричат ​​"извличащи" (защото не сте дали loggername аргумент), така че ще получите едно и също съобщение, което се появява във всичките ви регистрационни файлове.

Предлагам да добавите име към вашите регистратори и може би да използвате филтри.

Можете да приложите това към вашия код, както следва:

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))
    ...
person Alex L    schedule 26.10.2012
comment
Това също е поправено, вие и Ланару публикувахте отговора, аз, тъй като не мога да приема и двата, приех първия, въпреки че аз лично приемам и двата ;-) благодаря! - person ; 26.10.2012
comment
@BenMezger Не се притеснявайте, радвам се да помогна! :) - person Alex L; 27.10.2012