У меня есть класс logger в python (= 3.7):
class Logger(object):
def __init__(self, fpath=None):
self.console = sys.stdout
self.file = None
if fpath is not None:
mkdir_if_missing(os.path.dirname(fpath))
self.file = open(fpath, 'w')
def __del__(self):
self.close()
def __enter__(self):
pass
def __exit__(self, *args):
self.close()
def write(self, msg):
self.console.write(msg)
if self.file is not None:
self.file.write(msg)
def flush(self):
self.console.flush()
if self.file is not None:
self.file.flush()
os.fsync(self.file.fileno())
def close(self):
self.console.close()
if self.file is not None:
self.file.close()
, и я пытаюсь напечатать и записать несколько файлов в цикле for, например:
for i in range(5):
sys.stdout = Logger(os.path.join('logs', f'log_{i}.log'))
print('test')
он печатает на консоль правильно, но также продолжает записывать log_0
, log_1
, .... Поэтому мои распечатанные файлы выглядят так:
log_0.log
:
test
test
test
test
test
log_1.log
:
test
test
test
test
log_2.log
:
test
test
test
log_3.log
:
test
test
log_4.log
:
test
Я использовал, чтобы исправить это, когда я использовал FileHandlers. Но поскольку нет обработчиков, как я могу закрыть предыдущие файлы и просто записать в новые файлы?