Я использую logging.getLogging() таким образом, который не запрещен документацией, но напрямую не упоминается.Является ли журнал журнала logging.getLogger масштабируемым с множеством названных журналов?
Мои приложения обрабатывают файлы данных и сетевые соединения, иногда в потоках. Для того, чтобы определить строки логов для каждого соединения и/или файла данных, я делаю следующее:
data_file_name = "data_file_123.xml"
logger = logging.getLogger(data_file_name)
logger.info("This is logged.")
2013-07-22 05:58:55,721 - data_file_123.xml - INFO - This is logged.
Это работает очень хорошо:
- Избегает передающий экземпляр регистратора вокруг программного обеспечения.
- Обеспечивает, чтобы каждая строка помечена соответствующим идентификатором источника, не имея , чтобы выполнить ее вручную при каждом вызове регистрации.
Моя забота это из документации на http://docs.python.org/2/library/logging.html#logging.getLogger:
Все вызовы к этой функции с заданным именем возвращает тот же экземпляр регистратора . Это означает, что экземпляры регистратора никогда не должны передаваться между различными частями приложения.
Как уничтожаются экземпляры регистратора? Разрушены ли они? После обработки миллиона файлов будет использоваться миллион имен экземпляров журнала, которые будут использоваться в памяти? Я настраиваю себя на утечку памяти, поскольку память заполняется этими старыми экземплярами журнала?
Спасибо, что очищает мои подозрения. Часть миллионов файлов не была преувеличением, поэтому мне нужно изменить это.Глядя снова на документы, есть страница о добавлении контекста. Любые мнения о LoggerAdapter? http://docs.python.org/2/howto/logging-cookbook.html#using-loggeradapters-to-impart-contextual-information Сохранение API протоколирования будет приятным, и это позволяет это без необходимости создавать собственные слой. – nOw2
@ nOw2 Использование «LoggerAdapter» представляется подходящим. – Bakuriu