目标:将一个实验“A”运行10次,每次使用不同的输入。实验A返回一个浮点值作为其输出(让我们称其为结果)。10个实验的所有10个结果都应该保存在结果文件中(使用日志记录)。在运行实验A(每次)时,需要进行大量的日志记录。应将(10)个实验的所有中间输出写入(10)个不同的日志文件。
换句话说,如果我的实验目录是'exp_dir‘。在实验结束后,应该有一个结果(日志)文件保存每个实验的输出(只需要保存输出,其他不需要保存)。在运行每个实验的过程中,我将为exp_dir中的10个实验中的每个实验创建子目录(exp1、exp2等),并将实验结果记录在相应的子目录中(实验1的结果应保存在exp1子目录中)。我计划在一个单独的python文件中使用for循环来做这件事。
你能让我知道如何单独做日志吗?这就是我尝试的(而不是我在2个实验中尝试的10个实验)
import logging
import os
class MyLogger(object):
def __init__(self):
self.logger = logging.getLogger()
self.logger.setLevel(logging.INFO)
def activateLogFile(self, f):
d = os.path.dirname(f)
os.makedirs(d, exist_ok=True)
handler = logging.FileHandler(f)
self.logger.addHandler(handler)
def doLogging(self, fn, info):
self.activateLogFile(fn)
self.logger.info("{i}\n".format(i=info))
def run():
exp_dir = os.getcwd()
myLog.doLogging("{d}/res.log".format(d=exp_dir), "This is where results should be logged")
myLog.logger.propagate = False
for i in range(1, 3):
myLog.doLogging("{d}/exp{i}/info.log".format(i=i, d=exp_dir), "some logging")
myLog.doLogging("{d}/res.log".format(d=exp_dir), "Experiments done")
myLog = MyLogger()
if __name__ == "__main__":
run()但在exp2中记录的所有内容也都记录在exp1中,而res.log包含所有的日志记录(exp1、exp2也包括)
非常感谢你的帮助
发布于 2017-08-18 04:53:59
您的代码如下所示(大约):
self.logger = logging.getLogger()
handler = logging.FileHandler(f1)
self.logger.addHandler(handler)
self.logger.info("Log exp 1 stuff") # Logs to f1
handler = logging.FileHandler(f2)
self.logger.addHandler(handler)
self.logger.info("Log exp 2 stuff") # Logs to f1, f2
handler = logging.FileHandler(f3)
self.logger.addHandler(handler)
self.logger.info("Log global stuff") # Logs to f1, f2, f3注意,您正在向您的日志对象添加第二个处理程序,然后是第三个处理程序。您不能删除旧的处理程序。
您可以:
def __init__(self):
self.handler = None
# ... other code ...
def activateLogFile(self, f):
# ... other code ...
if self.handler is not None:
self.logger.removeHandler(self.handler)
self.handler = logging.FileHandler(f)
self.logger.addHandler(self.handler)正如Removing handlers from python中所建议的,也许您可以简单地使用:
def activateLogFile(self, f):
# ... other code ...
self.logger.handlers = []
self.logger.addHandler(handler)发布于 2017-08-18 05:14:31
keeping it simple出了什么问题
import logging
from os.path import join, dirname, abspath
def fast_log(msg, filename='res.log'):
logging.basicConfig(filename=filename, level=logging.INFO)
logging.info(msg)
def do_experiment(i):
filename = join(dirname(abspath(__file__)), "%d.log" % i)
fast_log("experiment initialization log", filename)
# do stuff
fast_log("first stage", filename)
# do a lot
# more stuff
# ...
results = execute_final_stage_of_exp()
return results
for i in range(1, 11):
fast_log(do_experiment(i))https://stackoverflow.com/questions/45742647
复制相似问题