我有一些将数据从一个数据库迁移到另一个数据库的示例作业,我希望获得有关当前进度的一些信息,例如从应用程序本身交互运行作业时的那些(我从命令行导出并运行它) ).我使用flowMeter和statsCatcher,但我得到的是整个时间和传递的记录总数(例如4657秒,50.000.000行).有没有解决方案来获得一个像样的日志?
您的解决方案是将条件子句添加到日志记录中.每一个真正的一行,比方说50000.使用序列的这个条件应该有效:
Numeric.sequence("log_seq",1,1) % 50000 == 0
Run Code Online (Sandbox Code Playgroud)
您可以使用自定义组件bcLogBack基本上使用sl4j facade堆栈输出日志.该组件有一个名为"条件记录"的选项,仅在条件评估为true时才发送消息.
或者,如果您不喜欢安装自定义组件的想法,则可以使用标准tLogRow(或tWarn,tDie或其他)来结束您的subjob,前缀为tFilter,其表达式与高级条件相同.这样你就可以让流通过(并触发日志消息),每50000只一次.这是一个非常基本的工作图
//---->tMySqlOutput--->tFilter-----//filter--->tWarn (or tLogRow)
Run Code Online (Sandbox Code Playgroud)
据我所知,tLogRow输出到控制台。因此您可以轻松地将输出插入其中。
如果tLogRow还不够,您可以将输出插入组件TJavaFlex。在那里您可以使用 log4j 或任何自定义输出之类的东西。
您也可以用作tFileDelimitedOutput日志文件。该组件有一个很好的“附加”选项,对于该用例来说就像一个魅力。
针对您的上述问题:如何获取日志信息
根据经验,我可以看出某些组件输出流。例如,tMysqlInput输出成功插入的行。
通常,为了记录信息,我使用tReplicate允许我将流的副本输出到日志文件的组件。
tMySqlOutput ---- tReplicate ----- tMap -------- tMySqlInput (insert in DB)
+---- tMap -------- tDelimitedFile (log info)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11143 次 |
| 最近记录: |