python - 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 的行为不是很熟悉,我的问题是如何创建我的日志文件,写入它并在每次迭代后关闭它(我希望能够将其推广到嵌套循环)
解决方案
您可以查看 python日志记录模块。它功能齐全且易于使用。它具有RotatingFileHandler
自动轮换文件的 aa。参见示例:如何使用 Python 的 RotatingFileHandler
推荐阅读
- swift - 是否可以在约束中包含 Core Data 实体类型?
- windows - 我最新的 Windows 10 SDK 安装不包括 rc.exe 和 rcdll.exe,所以我收到 LNK1158 错误
- networking - 将 Kong Admin API 暴露给内部网络
- c++ - 将 QVector 缩小到最后 10 个元素并重新排列一项
- reactjs - Icomoon:删除 icomoon.ttf 后 Xcode 构建失败,仍然正常运行
- mysql - Hibernate 没有从 MySQL 数据库中检索到给定日期的正确行
- slack - 如何向 slack 中的用户提供消息的删除 URL?
- angular - 如何使用 Angular 和 Flutter(都是 Dart)为工作区设置 VS Code 调试?
- json - 烧瓶在返回 jsonify 之前挂起((无输出错误))
- java - 使用 BufferedReader 计算文件总行数