У меня есть много кода в проекте с заявками на печать и вы хотите быстро найти грязный регистратор этих заявлений на печать и решили пойти по собственному маршруту. Мне удалось собрать регистратор, который печатает как на терминал, так и на файл (с помощью этого сайта), но теперь я хочу добавить простую метку времени для каждого оператора, и у меня возникает странная проблема.Пользовательский логгер с меткой времени в python
Вот мой класс ведения журнала.
class Logger(object):
def __init__(self, stream):
self.terminal = stream
self.log = open("test.log", 'a')
def write(self, message):
self.terminal.flush()
self.terminal.write(self.stamp() + message)
self.log.write(self.stamp() + message)
def stamp(self):
d = datetime.today()
string = d.strftime("[%H:%M:%S] ")
return string
Обратите внимание на метод штампа, который затем я пытаюсь использовать в методе записи.
При запуске следующие две строки я получаю неожиданный вывод:
sys.stdout = Logger(sys.stdout)
print("Hello World!")
Выход:
[11:10:47] Hello World![11:10:47]
Это то, что выход также выглядит в лог-файле, однако, я не вижу причин, почему строка, которую я добавляю, добавляется в конец. Может ли кто-нибудь помочь мне здесь?
ОБНОВЛЕНИЕ См. Ответ ниже. Однако для более быстрой ссылки проблема заключается в использовании «print()» в целом; замените его sys.stdout.write после назначения переменной.
Также используйте «протоколирование» для долгосрочных/крупных проектов сразу с места в карьер.
Я знаю, что Python имеет встроенную возможность ведения журнала. В настоящее время мой проект находится в состоянии замораживания, поэтому я не могу совершать серьезных изменений. Мне нужны только быстрые и грязные исправления. До тех пор, пока я не смогу реализовать лучший регистратор с вышеупомянутым модулем, я хочу только исправить мою текущую проблему, если это возможно. Если «logging» не может выводить регулярные операторы печати как на stdout, так и на файл, это не решает мою проблему. – Tristan
Регистраторы Python могут иметь несколько обработчиков, _ie_: и консоль, и файл, одновременно. IMHO Я бы не стал использовать встроенный в журнал Python модуль регистрации _major change_. IMO легко использовать и быстро реализовать. И есть много преимуществ - например, вы можете легко включать и выключать его. ИМО, создающая собственный журнал с нуля, представляет собой гораздо более сложную задачу. :) –
OK! Вы получили меня с тем, насколько подробно этот результат. Тем не менее, мне все еще интересно, почему моя предыдущая реализация сделала бы такую странную вещь. – Tristan