У меня есть несколько примеров заданий, которые переносят данные из одной базы данных в другую, и я хотел бы иметь некоторую информацию о текущем прогрессе, например, о том, что у вас есть, когда задание запускается в интерактивном режиме из самого приложения (я экспортирую и запускаю его из командной строки ). Я использую flowMeter и statsCatcher, но все, что я получил, — это общее время и общее количество переданных записей (например, 4657 секунд, 50 000 000 строк). Есть ли решение, чтобы получить приличный журнал?
Как вести журнал выполнения задач в Talend Open Studio?
Ответы (3)
Ваше решение заключается в добавлении условного предложения в ведение журнала. Что-то истинное на одну строку каждые, скажем, 50000. Это условие с использованием последовательности должно работать:
Numeric.sequence("log_seq",1,1) % 50000 == 0
Для в основном выводите свой журнал, используя фасадный стек sl4j. Компонент имеет параметр под названием «Условное ведение журнала», чтобы отправлять сообщение только тогда, когда условие оценивается как истинное.
В качестве альтернативы, если вам не нравится идея установки пользовательского компонента, вы можете завершить свою подзадачу, используя стандартный tLogRow (или tWarn, tDie или что-то еще) с префиксом tFilter с тем же выражением, что и расширенное условие. Таким образом, вы позволите потоку проходить (и сообщению журнала запускаться) только один раз каждые 50000. Вот очень простая диаграмма работы.
//---->tMySqlOutput--->tFilter-----//filter--->tWarn (or tLogRow)
Насколько я знаю, tLogRow
выводит в консоль. Таким образом, вы можете легко подключить к нему выход.
Если tLogRow
недостаточно, вы можете подключить свой вывод к компоненту TJavaFlex
. Там вы можете использовать что-то вроде log4j или любой пользовательский вывод.
Вы также можете использовать tFileDelimitedOutput
в качестве файла журнала. Этот компонент имеет удобную опцию «добавить», которая работает как шарм для этого варианта использования.
На ваш вопрос выше: Как получить информацию журнала
По опыту могу сказать, что некоторые компоненты выводят поток. Например, tMysqlInput
выводит успешно вставленные строки.
Как правило, для логирования информации я использую компонент tReplicate
, который позволяет мне выводить копию потока в лог-файл.
tMySqlOutput ---- tReplicate ----- tMap -------- tMySqlInput (insert in DB)
+---- tMap -------- tDelimitedFile (log info)
Вы также можете использовать tWarn в сочетании с tLogCatcher:
tMySqlOutput ---- tFilter ---- tWarn
tLogCatcher ---- tMap ---- tLogRow
tFilter не позволит вам регистрировать прогресс при каждом завершении строки (см. ответ Габриэле Б). tWarn будет иметь фактическое сообщение, которое вы хотите выйти из системы.
tLogCatcher должен получать входные данные от всех tWarns, tMapper преобразует каждую строку из logCatcher в выходную строку, а tLogRow регистрирует ее.
Этот ответ описан более подробно (с картинками): http://blog.wdcigroup.net/2012/05/error-handling-in-talend-using-tlogcatcher/