Python - создание и вывод файла журнала в другую папку в цикле - PullRequest
0 голосов
/ 29 октября 2019

У меня есть этот класс Logger, который я использую для записи в консоль и в файл. Однако требования изменились, и я хочу вывести файл журнала в другую папку, используя цикл for

import sys
import os
#from pathlib import Path

class Logger(object):
    def __init__(self, name, mode="a"):
         self.stderr = sys.stderr
         self.stdout = sys.stdout
         self.log = open(name, mode)
    def __del__(self):
         sys.stderr = self.stderr
         sys.stdout = self.stdout
         self.log.close()
    def write(self, message):
         self.stdout.write(message)
        #self.stderr.write(message)
         self.log.write(message)
    def flush(self):
         self.log.flush()



def printing(x):
     print(x)

def output_path(path, x):
     fname = os.path.join(path, "log_" + str(x) + ".txt")
     if os.path.exists(fname): os.remove(fname)
     sys.stdout = Logger(fname)

for i in range(3):
     path = "../../../test/{}".format(str(i))
     if not os.path.exists(path):
         os.makedirs(path)

     output_path(path, i)
     printing(i + "Piece")

Когда я запускаю этот код, создаются 3 файла журнала, однако выходные данные влог файлы не то что я хочу.

Текущий вывод **

Log_0.txt -> 0piece
             1piece
             2piece 

Log_1.txt -> 1piece
             2piece

Log_2.txt -> 2piece

Предпочитаемый вывод

Log_0.txt -> 0piece

Log_1.txt -> 1piece

Log_2.txt -> 2piece

Как вы можете видеть, я не очень знаком с поведением Logger, мой вопрос: как это сделать? Я создаю свой файл журнала, пишу в него и закрываю его после каждой итерации (я хочу иметь возможность обобщать это для вложенных циклов)

1 Ответ

1 голос
/ 29 октября 2019

Вы можете заглянуть в модуль python logging . Он полон функций и прост в использовании. Он имеет RotatingFileHandler, который автоматически поворачивает файлы. Смотрите пример: Как использовать RotatingFileHandler Python

...