Ответ 1
Похоже, что внутренности вашего класса должны иметь Logger
и что вы захотите добавить FileHandler
до Logger
. Возможно, вам стоит рассмотреть возможность использования метода factory, который создает Logger
и добавляет обработчик вместо реализации вашего собственного класса. Вам может потребоваться создать каталоги, в которых хранятся файлы журнала. См. этот ответ за советом по созданию каталогов.
Edit:
Я не думаю, что вам нужно написать свой собственный класс Logger
. В модуле Python logging
есть все, что вам нужно. Вероятно, вам просто нужен метод factory. Ключом к пониманию является создание двух отдельных, полностью независимых объектов каротажа. Вы делаете это с помощью logging.getLogger
, и в любое время, когда вы передаете ему другое имя, оно дает вам другой регистратор. Вы можете использовать все, что хотите для имени регистратора. Конечно, вы хотите держаться подальше от basicConfig
за то, что вы делаете. Это было просто для людей, которые просто хотят, чтобы один Logger
не делал ничего особенного.
Я думаю, что это демонстрирует функциональность, которой вы пользуетесь. Ключ состоит в создании двух разных регистраторов с разными обработчиками. Затем используйте их отдельно. Имейте в виду, что мой второй вызов logging.getLogger
не создает новый журнал; он получает тот, который мы первоначально установили в setup_logger
.
log_test.py:
from __future__ import absolute_import
import logging
def setup_logger(logger_name, log_file, level=logging.INFO):
l = logging.getLogger(logger_name)
formatter = logging.Formatter('%(asctime)s : %(message)s')
fileHandler = logging.FileHandler(log_file, mode='w')
fileHandler.setFormatter(formatter)
streamHandler = logging.StreamHandler()
streamHandler.setFormatter(formatter)
l.setLevel(level)
l.addHandler(fileHandler)
l.addHandler(streamHandler)
def main():
setup_logger('log1', r'C:\temp\log1.log')
setup_logger('log2', r'C:\temp\log2.log')
log1 = logging.getLogger('log1')
log2 = logging.getLogger('log2')
log1.info('Info for log 1!')
log2.info('Info for log 2!')
log1.error('Oh, no! Something went wrong!')
if '__main__' == __name__:
main()
Пример прогона:
C:\temp>C:\Python\27\python.exe logtest.py
2013-06-12 02:00:13,832 : Info for log 1!
2013-06-12 02:00:13,832 : Info for log 2!
2013-06-12 02:00:13,832 : Oh, no! Something went wrong!
log1.log:
2013-06-12 02:00:13,832 : Info for log 1!
2013-06-12 02:00:13,832 : Oh, no! Something went wrong!
log2.log:
2013-06-12 02:00:13,832 : Info for log 2!