1. 概述
1.1 版本
FineDataLink 版本 | 功能变动 |
---|---|
1.9 | 日志新增:写入数据行数、更新数据行数 |
3.4 | 显示的具体日志中,将「中止」改为「终止」 |
4.0.1 | 任务运行日志优化,提供更准确的日志信息,降低用户排查问题的成本 |
4.1.1 | 4.1.1 及之后版本,支持调整业务日志输出级别,因此日志内容也做了优化:
|
1.2 功能简介
定时任务运行后,将会产生运行日志,便于用户查看任务运行情况。如下图所示:
本文介绍在「日志」这个 Tab 页下,具体显示内容。
1.3 注意事项
一个定时任务中有多个流程,在执行后如果有一个流程执行失败,其他流程执行成功的话,整个定时任务的状态是失败的,但是其中的部分流程是执行成功的。
2. 用户需知
1)4.1.1 及之后版本,支持调整业务日志输出级别,因此日志内容也做了优化:
增加:实例等待运行日志的打印。
增加:INFO级别,打印更加详细的日志,包括参数值、执行脚本、API请求、API分页取数
优化:明确各条日志的等级,将日志级别打印到日志中。
读数类节点,统一增加删除数据的统计。
2)设置日志级别后(任务级别日志配置、全局日志配置),打印的日志说明如下表所示:
设置的日志级别 | 打印的日志级别 |
---|---|
INFO级别 | BASIC INFO ERROR WARN INFO |
WARN级别 | BASIC INFO ERROR WARN |
ERROR级别 | BASIC INFO ERROR |
3. 示例
定时任务的日志均采用下面的格式:
yyyy-mm-dd hh:mm:ss 任务状态\节点状态 [日志等级] 日志内容 [日志等级] 日志内容 yyyy-mm-dd hh:mm:ss 任务状态\节点状态 [日志等级] 日志内容 [日志等级] 日志内容 运行总览:执行成功 x,执行失败 y,终止执行 z,跳过执行 w 执行完毕,总计耗时:nms |
2.1 基础日志打印
基础日志展示的内容为任务运行/节点执行的状态,不受任务日志级别控制,不管哪个日志级别,都需要进行打印。
各级别的日志,都是套在基础日志的框架里的,比如 ERROR 级别的日志,是对应失败状态的日志补充。
2.1.1 常规基础日志打印
状态 | 打印日志 | 说明 |
---|---|---|
实例开始构建 | yyyy-mm-dd hh:min:ss 实例开始构建 | |
实例构建结果 | yyyy-mm-dd hh:min:ss 实例构建成功 yyyy-mm-dd hh:min:ss 实例构建失败 | 日志互斥,只能出现其中一条 |
实例等待运行 | yyyy-mm-dd hh:min:ss 实例正在排队 | |
实例开始运行 | yyyy-mm-dd hh:min:ss 实例开始运行 | |
节点开始执行 | yyyy-mm-dd hh:min:ss 开始执行:【节点Name】 yyyy-mm-dd hh:min:ss 跳过执行:【节点Name】 | 日志互斥,只能出现其中一条 |
节点执行结果 | yyyy-mm-dd hh:min:ss 执行成功:【节点Name】 yyyy-mm-dd hh:min:ss 执行失败:【节点Name】 yyyy-mm-dd hh:min:ss 终止执行:【节点Name】 | 日志互斥,只能出现其中一条 |
实例运行结果 | yyyy-mm-dd hh:min:ss 实例运行成功 yyyy-mm-dd hh:min:ss 实例运行失败 yyyy-mm-dd hh:min:ss 实例运行中断 |
2.1.2 循环容器基础日志打印
循环容器 的日志打印是整体逻辑,并非某条日志输出,因此无法定义日志等级。
对应的基础日志 | 日志格式 | 日志示例 |
---|---|---|
开始执行:【节点Name】 | 执行n次循环 (仅展示最近5次循环信息) 第1次执行: yyyy-mm-dd hh:mm:ss 描述 详情 第2次执行: yyyy-mm-dd hh:mm:ss 描述 详情 ...... 第n次执行: yyyy-mm-dd hh:mm:ss 描述 详情 执行完毕,总计耗时:ns | 2023-08-31 21:26:55 开始执行【循环容器】 执行20次循环 (仅展示最近5次循环信息) 第16次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[16] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[16] 第17次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[17] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[17] 第18次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[18] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[18] 第19次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[19] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[19] 第20次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[20] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[20] 执行完毕,总计耗时:5.0s |
2.1.3 失败重试基础日志打印
失败重试 的日志打印是整体逻辑,并非某条日志输出,因此无法定义日志等级。
对应的基础日志 | 日志格式 | 日志示例 |
---|---|---|
执行失败:【节点Name】 | 重新执行 (仅展示最近5次循环信息) 第1次重试: yyyy-mm-dd hh:mm:ss [日志等级] 描述 详情 yyyy-mm-dd hh:mm:ss [日志等级] 描述 ...... 第n次执行: yyyy-mm-dd hh:mm:ss [日志等级] 描述 详情 yyyy-mm-dd hh:mm:ss [日志等级] 描述 详情 等待第n+1次重试... | 等待首次重试: 等待第2次重试: |
3. BASIC INFO 日志
对应的基础日志 | 日志格式 | 日志示例 | 说明 |
---|---|---|---|
实例运行中断 | [BASIC INFO] 任务超时,中断运行 | 2023-08-31 19:14:09 实例运行中断 [BASIC INFO] 任务超时,中断运行 | |
开始执行:【节点Name】 | [BASIC INFO] - 启动时刻:yyyy-mm-dd hh:mm:ss - 实时读取速度: nB/s, n行/s - 实时写入速度: nB/s, n行/s - 累计写入行数: n行 - 累计更新行数: n行 - 累计删除行数: n行 - 写入脏数据行数: n行 正在执行【节点名称】... | 2023-08-31 19:45:26 开始执行【数据同步】 [BASIC INFO] - 启动时刻:2023-08-3119:45:26 - 实时读取速度:0B/s,0行/s - 实时写入速度:0B/s,0行/s - 累计写入行数:0行 - 累计更新行数:0行 - 累计删除行数:0行 - 写入脏数据行数:0行 正在执行【数据同步】.. | 仅在节点执行过程中打印,节点执行完毕时清除此日志 适用节点:
|
开始执行:【节点Name】 | [BASIC INFO] - 启动时刻:yyyy-mm-dd hh:mm:ss - 实时下载速度:nB/s - 实时上传速度:nB/s - 上传成功文件数:n个 正在执行【文件传输】... | 2023-08-31 19:45:26 开始执行【文件传输】 [BASIC INFO] - 启动时刻:2023-08-3119:45:26 - 实时下载速度:0B/s - 实时上传速度:0B/s - 上传成功文件数:0个 正在执行【文件传输】.. | 适用节点: 文件传输 |
执行成功:【节点Name】 | [BASIC INFO] - 启动时刻:yyyy-mm-dd hh:mm:ss - 结束时刻:yyyy-mm-dd hh:mm:ss - 平均流量:nB/s - 平均写入速度:n行/s - 读取数据行数:n行 - 写入数据行数:n行 - 更新数据行数:n行 - 删除数据行数:n行 - 写入脏数据行数:n行 - 耗时:ns 注:「写入数据行数」为直接写入的数据行数,不同数据库统计时有一定差异;比如有的数据库写入时覆盖写入的数据也会归到「写入数据行数」中 | 2023-08-31 20:03:33 节点执行成功【参数赋值】 [BASIC INFO] - 启动时刻:2023-08-31 20:03:32 - 结束时刻:2023-08-31 20:03:33 - 平均流量:871B/s - 平均写入速度:1行/s - 读取数据行数:20行 - 写入数据行数:1行 - 更新数据行数:0行 - 删除数据行数:0行 - 写入脏数据行数:0行 - 耗时:1.0s | 适用节点:
|
执行成功:【节点Name】 | [BASIC INFO] - 启动时刻:yyyy-mm-dd hh:mm:ss - 结束时刻:yyyy-mm-dd hh:mm:ss - 平均流量:nB/s - 下载文件个数:n个 - 上传文件个数:n个 - 耗时:ns | 2023-08-31 20:03:33 节点执行成功【文件传输】 [BASIC INFO] - 启动时刻:2023-08-31 20:03:32 - 结束时刻:2023-08-31 20:03:33 - 平均流量:871B/s - 下载文件个数:20个 - 上传文件个数:1个 - 耗时:1.0s | 适用节点: 文件传输 |
跳过执行:【节点Name】 | [BASIC INFO] 节点连线条件不满足 [BASIC INFO] 条件分支条件不满足 | 2023-08-31 22:07:48 跳过执行【虚拟节点】 [BASIC INFO] 条件分支条件不满足 |
4. ERROR 日志
日志级别设置为 ERROR、INFO、WARN 时,日志说明如下:
对应的基础日志 | 日志格式 | 日志示例 | 说明 |
---|---|---|---|
实例构建失败 | [ERROR] 异常节点:【节点Name】 具体错误信息 .... 异常节点:【节点Name】 具体错误信息 | 2023-08-31 19:09:44 任务构建失败 [ERROR] 异常节点:【数据转换】 [DB表输出]: 目标表为空 字段映射表为空 | ALL |
执行失败:【节点Name】 | [ERROR] [错误对象]:错误标题 - 描述 | 2023-08-31 19:19:27 执行失败【数据同步】 [ERROR] [数据来源]:数据连接异常 - DataBase[FRDemo] get column failed - [SQLITE_ERROR] SQL error or missing database (near "1": syntax error) | 通用错误 |
执行失败:【节点Name】 | [ERROR] 脏数据条数检查不通过,限制是[x]条,但实际上捕获了[y]条. 错误定位:写入目的表[Table_name]时遇到了脏数据,数据无法正常写入,请检查并作出修改. 异常情况:具体错误信息 建议排查的目标字段: {字段序号:1,字段名:a1,数据类型:INT} {字段序号:2,字段名:a2,数据类型:VARCHAR} 错误记录: {字节数:1,字段序号:1,字段值:value1,数据类型:STRING} {字节数:1,字段序号:2,字段值:value2,数据类型:STRING} | 2023-08-31 19:19:27 执行失败【数据同步】 [ERROR] 脏数据条数检查不通过, 限制是[20]条, 但实际上捕获了[700]条 错误定位: 写入[SALE_BSEG]目的表时遇到了脏数据,数据无法正第写入,请做出检查井修改 异常情况: ORA-01653:表 BLLODS_TEST.SALE_BSEG 无法通过 8192(在表空间 BI_ODS_TEST 中)扩展 建议排查的目标字段: {字段序号:295, 字段名: PENDAYS, 数据类型: NUMBER} {字段序号:333, 字段名: CURRENT_TIMESTAMP, 数据类型:TIMESTAMP} 错误记录: {字节数:3, 字段序号:1, 字段值:"800",数据类型:STRING} {字节数:4, 字段序号:2, 字段值:"1001”,数据类型:STRING | 仅在出现脏数据时打印 仅打印最近一条脏数据,脏数据明细可以在统计里导出或去fanruan.log中查看 |
5. WARN 日志
日志级别设置为 WARN、INFO 时,日志说明如下:
对应的基础日志 | 日志格式 | 日志示例 | 说明 |
---|---|---|---|
执行成功:【节点Name】 | [WARN] 检查发现[y]条脏数据 | 2023-08-31 20:03:33 节点执行成功【参数赋值】 [BASIC INFO] - 启动时刻:2023-08-31 20:03:32 - 结束时刻:2023-08-31 20:03:33 - 平均流量:871B/s - 平均写入速度:18行/s - 读取数据行数:20行 - 写入数据行数:18行 - 更新数据行数:0行 - 删除数据行数:0行 - 写入脏数据行数:2行 - 耗时:1.0s [WARN] 检查发现[2]条脏数据 建议排查的目标字段: {字段序号:1,字段名:a1,数据类型:INT} {字段序号:2,字段名:a2,数据类型:VARCHAR} 错误记录: {字节数:1,字段序号:1,字段值:value1,数据类型:STRING} {字节数:1,字段序号:2,字段值:value2,数据类型:STRING} | 适用节点:
仅打印最近一条脏数据,脏数据明细可以在统计里导出或去fanruan.log中查看 |
6. INFO 日志
任务日志等级为 INFO 时,打印 INFO 级别的日志。
对应的基础日志 | 日志格式 | 说明 |
---|---|---|
开始执行:【节点Name】 | [INFO] [算子Name]: --若不包含算子,则不打印算子Name 使用参数: - 参数[参数名1]:值1 - 参数[参数名2]:值2 |
|
开始执行:【节点Name】 | [INFO] [算子Name]: --若不包含算子,则不打印算子Name 执行脚本: 「实际执行的命令语句」 输出信息:--若无内容,则不打印,shell脚本、Bat脚本、Python脚本可能会有输出 「脚本执行后输出的信息」 |
|
开始执行:【节点Name】 | [INFO] [算子Name]: --若不包含算子,则不打印算子Name 请求信息: - 证书地址:/xx/xx/test.CRT --若未配置自签名证书,则不打印 - Request: POST http://www.fanruan.com/testapi/ - Headers: Content-Type: application/json - Body: {"key":"Im a JSON"} 服务端响应: - HttpStatusCode:200 - Headers: Content-Type: application/json |
|