5

我有一些将数据从一个数据库迁移到另一个数据库的示例作业,我想了解有关当前进度的一些信息,例如从应用程序本身以交互方式运行作业时所拥有的信息(我从命令行导出并运行它) )。我使用 flowMeter 和 statsCatcher 但我得到的只是总时间和通过的记录总数(例如 4657 秒,50.000.000 行)。有什么解决方案可以得到一个像样的日志吗?

4

3 回答 3

5

您的解决方案是在日志记录中添加条件子句。每隔一行,假设 50000 是真的。使用序列的这个条件应该有效:

Numeric.sequence("log_seq",1,1) % 50000 == 0 

您可以使用自定义组件bcLogBack基本上使用 sl4j 外观堆栈输出您的日志。该组件有一个名为“条件日志记录”的选项,仅当条件评估为真时才发送消息。

或者,如果您不喜欢安装自定义组件的想法,您可以使用标准 tLogRow(或 tWarn、tDie 或其他)结束您的子作业,并使用与高级条件相同的表达式作为前缀的 tFilter。这样,您将每 50000 次让流通过(以及要触发的日志消息)一次。这是一个非常基本的工作图

//---->tMySqlOutput--->tFilter-----//filter--->tWarn (or tLogRow)
于 2013-06-18T12:13:13.660 回答
3

据我所知,tLogRow输出到控制台。因此,您可以轻松地将输出插入其中。

如果tLogRow还不够,您可以将输出插入到TJavaFlex组件中。在那里你可以使用类似 log4j 或任何自定义输出的东西。

您也可以tFileDelimitedOutput用作日志文件。这个组件有一个很好的“附加”选项,就像这个用例的魅力一样。


对于您上面的问题:如何获取日志信息

根据经验,我可以说某些组件输出流。例如,tMysqlInput输出成功插入的行。

通常,为了记录信息,我使用tReplicate允许我将流的副本输出到日志文件的组件。

 tMySqlOutput ---- tReplicate ----- tMap -------- tMySqlInput (insert in DB)
                              +---- tMap -------- tDelimitedFile (log info)
于 2013-06-17T14:26:30.263 回答
1

您还可以将 tWarn 与 tLogCatcher 结合使用:

tMySqlOutput ---- tFilter ---- tWarn

tLogCatcher ---- tMap ---- tLogRow

tFilter 会阻止您记录每行完成的进度(请参阅 Gabriele B 的回答)。tWarn 将包含您要注销的实际消息。

tLogCatcher 应该从所有 tWarns 中获取输入,tMapper 将 logCatcher 中的每一行转换为输出行,然后 tLogRow 记录它。

该答案更详细地描述(带图片):http ://blog.wdcigroup.net/2012/05/error-handling-in-talend-using-tlogcatcher/

于 2014-01-14T18:05:19.440 回答