首页 > 解决方案 > Python - 在循环中创建日志文件并将其输出到不同的文件夹

问题描述

我有这个 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 的行为不是很熟悉,我的问题是如何创建我的日志文件,写入它并在每次迭代后关闭它(我希望能够将其推广到嵌套循环)

标签: pythonlogging

解决方案


您可以查看 python日志记录模块。它功能齐全且易于使用。它具有RotatingFileHandler自动轮换文件的 aa。参见示例:如何使用 Python 的 RotatingFileHandler


推荐阅读