Логгирование с повторным использованием параметров

В проекте discounter я использовал простое логирование с помощью модуля logging. Проект состоит из модулей которые пишут свои сообщения в один и тот же файл. Понятно, что можно изменить шаблон логов таким образом для определения того кто пишет

logging.Formatter("%(asctime)-15s %(levelname)-8s [%(moduleName)-10s] %(message)s")

Где moduleName есть имя модуля. Это все довольно просто. Но мне не нравится всегда писать длинные конструкции вроде

self._log.info("Лог в файл %s", var, moduleName=moduleName)

Т.е. вечно пихать в и так длинную строку еще имя модуля. Т.о. предлагаю такое решение: В классе модуля переопределить __getattr таким образом

def __getattr__(self, name):
   try:
        return self._logNamesPart[name]
     except KeyError:
       obj = getattr(self._log, name)
     if obj is not None:
       part = partial(obj, moduleName=self.__class__.__name__)
       self._logNamesPart[name] = part
       return part
     else:
       self._log.error("Попытка вызова несуществующего типа лога "%s"",
         name, moduleName=self.__class__.__name__)

Теперь при создании лога я пишу так

self.debug("Запущен парсер")

и все. При этом создается запись с необходимым именем модуля. Объясню код: существует удобная функция partial с помощью которой можно повторно вызывать функцию не повторяя каждый раз параметры вызова, а указывать только изменившиеся. Получается что при вызове лога с уровнем info, создается partial-функция и сохраняется во внутреннее свойство _logNamesPart, в следующий раз при вызове info, partial будет взят от туда, а если будет вызван другой метод, например debug, он также будет создан и сохранен для последующего использования. В результате я укоротил вызов лога с

self._log.debug("Запущен парсер", moduleName=moduleName)

до

self.debug("Запущен парсер")