span8
span4
你好,
我认为在FME python进程的交互方式中有一些我不理解的东西。
我使用python库“日志”来跟踪在python调用程序中解析的异常,在每一个python调用者中,在功能处理器的创建者中,我定义了伐木工,使用不同的文件名称,和不同的对象名称,但最后每一行都写下来了,不仅在上述文件中,但是也被堆在任何以前的python调用者创建的日志文件中…
(TL;DR:日志文件B.log包含来自pythonCallerB的日志,但是日志文件A.log同时包含来自pythonCallerB和pythonCallerA的日志)
我怀疑你没有正确地激活记录器,如果希望每个PythonCaller登录到不同的文件,就必须为它们定义单独的处理程序。这是在日志模块中设计的,并不特定于FME。这里的第一段可能适用于你的情况:https://docs.python.org/2/howto/logging-cookbook.html#using-logging-in-multiple-modules
示例PythonCaller初始化自己的处理程序:
import fmeimport fmeobjectsimport logging class featureprocessor1(object):def u init_uuuu(self):logger_name=self.uu class_uuuu name_uuuuu logger_file name=self.uu class_uuuu name_uuuu+。log'print“%s is logging to file%s”%(logger_name,logger_filename)self.logger=logging.getlogger(logger_name)self.logger.setlevel(logging.info)fh=logging.filehandler(logger_filename)创建格式化程序并将其添加到处理程序formatter=logging.formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')fh.setformatter(格式化程序)#将处理程序添加到记录器self.logger.addhandler(fh)def input(self,feature):self.logger.info(“来自pythoncaller_1的消息”)self.pyoutput(feature)
示例工作区中有两个PythonCallers,它们使用日志模块来记录文件:pythonlogger.fmwt
为使上述工作不作任何修改,确保所有的PythonCallers使用单独的类名,否则,它们将为相同的日志文件名而竞争。样例输出
FeatureProcessor1.log
2017-03-16 13:23:20,411 - FeatureProcessor1 - INFO -来自PythonCaller_1的消息
FeatureProcessor2.log
2017-03-16 13:23:20,411 - FeatureProcessor2 - INFO -来自PythonCaller_2的消息
你好,
您是否在记录异常之后重新启动异常?
如果是这样的话,这就是为什么以前的PythonCallers也记录异常。
我的理解是,当PythonCaller_1后面跟着PythonCaller_2和PythonCaller_1调用self.pyoutput时,这个函数调用在特性写入输出或由阻塞变压器持有之前不会返回。因此,如果PythonCaller_2捕捉到异常,原木,把它升起来,PythonCaller_2也会捕捉到它。
在和我讨论之后@david_r在下面的评论中,如果您正在回调异常,并且不想让以前的PythonCallers记录它,您必须将pyoutput调用放在try块之外。
一个消息从PythonCaller_12017-03-16 14:28:20 157 - FeatureProcessor1 -错误-整数除法或模数除以0PythonCaller_2的日志仍然是空的,像预期的那样。看到 pythonlogger.fmwt
你好,
我建议您使用FME本身的日志记录器。文件可在此找到:
https://docs.亚搏在线safe.com/fme/html/FME_Objects_Python_API/fmeobjects.FMELogFile-class.html
©2019安全亚搏在线软件公司法律