Ведение журнала 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

Иерархия папок выглядит следующим образом;

  • /Парсеры
  • /Парсеры/base.py
  • /Парсеры/shared.py
  • /Парсеры/parserone.py
  • /Парсеры/parsertwo.py
  • /Парсеры/parsersthree.py
  • /Парсеры/...
  • /Парсеры/журналы/base.log
  • /Парсеры/журналы/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