如何阻止jMetalPy生成jmetalpy.log日志文件?
如何禁用jMetalPy生成的jmetalpy.log日志文件
每次运行jMetalPy算法时,都会自动生成jmetalpy.log文件,导致目录杂乱,且官方文档未提及禁用方式。以下是两种可行的解决办法:
方法一:仅禁用日志文件,保留控制台输出
jMetalPy的日志系统基于Python标准库logging实现,默认会添加一个文件处理器写入jmetalpy.log。我们可以获取jMetalPy的根日志器,移除其中的文件处理器即可:
import logging # 获取jMetalPy的根日志器 jmetal_logger = logging.getLogger('jmetal') # 遍历并移除所有文件处理器 for handler in list(jmetal_logger.handlers): if isinstance(handler, logging.FileHandler): jmetal_logger.removeHandler(handler)
将这段代码放在你的算法代码之前,完整示例如下:
import logging from jmetal.algorithm.multiobjective.nsgaii import NSGAII from jmetal.operator import PolynomialMutation, SBXCrossover from jmetal.util.termination_criterion import StoppingByEvaluations from jmetal.util.evaluator import SpoolEvaluator from your_module import MyProblem, FrontObserver # 导入自定义问题和观察者 # 禁用jmetalpy.log文件生成 jmetal_logger = logging.getLogger('jmetal') for handler in list(jmetal_logger.handlers): if isinstance(handler, logging.FileHandler): jmetal_logger.removeHandler(handler) problem = MyProblem() front_observer = FrontObserver() algorithm = NSGAII( problem=problem, population_size=4, offspring_population_size=2, mutation=PolynomialMutation(probability=1.0 / problem.number_of_variables, distribution_index=20), crossover=SBXCrossover(probability=1.0, distribution_index=20), termination_criterion=StoppingByEvaluations(max_evaluations=10), population_evaluator=SpoolEvaluator() ) algorithm.observable.register(front_observer) algorithm.run()
方法二:完全禁用jMetalPy的所有日志
如果不需要任何jMetalPy的日志输出(包括控制台日志),可以直接将其日志级别设置为高于CRITICAL,让所有日志都被过滤:
import logging logging.getLogger('jmetal').setLevel(logging.CRITICAL + 1)
原理说明
jMetalPy启动时会自动配置日志系统,默认创建一个FileHandler来写入jmetalpy.log。通过修改日志器的处理器或级别,就能阻止日志文件的生成,且不会影响算法的正常运行。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

