原文地址:
https://knowledge.safe.com/articles/849/how-to-extract-and-use-log-information-in-workbenc.html?smartspace=debugging-tips
一、下载二、使用Python FMELogFile 对象在启动和关闭Python(位于Workbench中工作空间参数-Advanced中)中可以使用FMEObjects Python API,与PythonCaller和PythonCreator 一样。其中一个可用的对象是FMELogFile,它提供了访问Workbench日志的功能。多数FMELogFile方法用于在日志中添加信息,但是setCallBack方法允许你发送所有日志信息的副本到你的函数中。这使你可以在创建日志信息时对其进行解析,并在允许时将这些消息中的信息传递给工作空间中的要素。
下面三个例子展示了在工作空间运行期间日志信息的一些可能的用途。
三、应用案例3.1 促进对失败的警告一个用户发现他的一些Microstation DGN文件被中断。通常,FME遇到中断文件只会在日志中发布警告,但不会转换失败。用户希望截断的文件发生失败,以便与正确的文件区分开 。
- FailTruncated工作空间中的Startup Python对每个日志文件搜索截断的DGN文件警告,找到后设置一个标记。
- 所有DGN要素读取完成后, Creator转换器在流程结束时,创建一个新的要素,
- 把新要素发送到PythonCaller,通过代码检查是否设置了中断标记。如果有标记,工作空间终止。
- PythonCaller输出连接到NULL写模块,该写模块设置为与工作空间中的第一个写模块。
- 第二个DGN写模块直到工作空间完成才进行写出,所以如果工作空间终止则不会有文件写出。

3.2 提取文件或表的元数据Workbench读模块通常在日志中包括文件或表的元数据,但是不会把信息添加到从文件中读取的要素中。DGNMetadata示例从文件夹中的所有Microstation DGN文件中提取Global Origin,Master和Sub单元名称和比例,并将此信息输出到Excel文件。
- 工作空间中的Startup Python使用正则表达式从读模块日志信息中提取Global Prigin和工作空间单位参数,并把它们存储到global列表中。
- 每个DGN文件只读取一个要素(把读模块参数- Advanced - Max Features to Read 设置为 1)。
- 使用FeatureHolder确保后续处理之前,读取了所有DGN文件。
- PythonCaller使用multi_reader_id 通用属性把每个要素连接到它的元数据。这个属性包含了每个文件的读取顺序,并对应于元数据Python列表的索引。
- 重命名属性,然后将要素写出到Excel。

输出:

3.3 保存中间转换器的参数AffineWarper转换器通过输入的控制矢量要素计算了一个最佳拟合的仿射变换,然后将它们应用到observed端口的要素中并输出。计算的参数在日志中被记录,但是没有存储在转换的要素上。GetAffineParameters示例提取这些参数到CSV文件中供选择使用。
- 从CSV文件中读取数据并转换为矢量
- 矢量发送到AffineWareper并用于转换虚拟点
- 工作空间中的Startup Python使用正则表达式从AffineWarper日志信息中提取仿射变换参数
- 仿射变换完成后,在进程后使用Creator_2 转换器创建一个新的要素
- PythonCaller将仿射参数添加到要素,然后写入到CSV中
