kettle日志添加字段的源码修改
2016-07-13 14:17
1326 查看
LogTableInterface.java(/kettle4.2/src-db/org/pentaho/di/core/logging/LogTableInterface.java)
73、74行添加接口方法:
//增加jobName参数 mengshanfeng public RowMetaAndDatagetLogRecord(LogStatus status, Object subject, Object parent,String jobName);
保存后,会报如下几个实现此接口的实现类的错误,依次实现空方法即可。
ChannelLogTable(/kettle4.2/src/org/pentaho/di/core/logging/ChannelLogTable.java)
JobEntryLogTable(/kettle4.2/src/org/pentaho/di/core/logging/JobEntryLogTable.java)
JobLogTable(/kettle4.2/src/org/pentaho/di/core/logging/JobLogTable.java)
PerformanceLogTable(/kettle4.2/src/org/pentaho/di/core/logging/PerformanceLogTable.java)
StepLogTable(/kettle4.2/src/org/pentaho/di/core/logging/StepLogTable.java)
TransLogTable(/kettle4.2/src/org/pentaho/di/core/logging/TransLogTable.java)
TransLogTable.java(/kettle4.2/src/org/pentaho/di/core/logging/TransLogTable.java)
48、49行添加类变量
//mengshanfeng public static String jobName = "";
330-374行注释掉
//并用如下代码代替:return getLogRecord(status,subject,parent,TransLogTable.jobName);
378-433添加接口方法的实现
//增加jobName参数 mengshanfeng public RowMetaAndData getLogRecord(LogStatus status, Object subject, Object parent,String jobName) { //mengshanfeng if(jobName!=null && !"".equals(jobName)){ TransLogTable.jobName = jobName; } if (subject==null || subject instanceof Trans) { Trans trans = (Trans) subject; Result result = null; if (trans!=null) result = trans.getResult(); RowMetaAndData row = new RowMetaAndData(); int tt = 0; for (LogTableField field : fields) { if (field.isEnabled()) { Object value = null; if (trans!=null) { switch(ID.valueOf(field.getId())){ case ID_BATCH : value = new Long(trans.getBatchId()); break; case CHANNEL_ID : value = trans.getLogChannelId(); break; case TRANSNAME : value = trans.getName(); break; case STATUS : value = status.getStatus(); break; case LINES_READ : value = new Long(result.getNrLinesRead()); break; case LINES_WRITTEN : value = new Long(result.getNrLinesWritten()); break; case LINES_INPUT : value = new Long(result.getNrLinesInput()); break; case LINES_OUTPUT : value = new Long(result.getNrLinesOutput()); break; case LINES_UPDATED : value = new Long(result.getNrLinesUpdated()); break; case LINES_REJECTED : value = new Long(result.getNrLinesRejected()); break; case ERRORS: value = new Long(result.getNrErrors()); break; case STARTDATE: value = trans.getStartDate(); break; case LOGDATE: value = trans.getLogDate(); break; case ENDDATE: value = trans.getEndDate(); break; case DEPDATE: value = trans.getDepDate(); break; case REPLAYDATE: value = trans.getCurrentDate(); break; case LOG_FIELD: value = getLogBuffer(trans, trans.getLogChannelId(),status, logSizeLimit); break; } } tt = field.getDataType(); row.addValue(field.getFieldName(), field.getDataType(), value); row.getRowMeta().getValueMeta(row.size()-1).setLength(field.getLength()); } } //增加两句话 mengshanfeng row.addValue("jobName", tt, TransLogTable.jobName); row.getRowMeta().getValueMeta(row.size()-1).setLength(10); return row; } else { return null; } }
Trans.java(/kettle4.2/src/org/pentaho/di/trans/Trans.java)
1692行添加函数调用参数
<pre name="code" class="java"> //增加jobName参数 mengshanfeng transLogTableDatabaseConnection.writeLogRecord(transLogTable,LogStatus.START, this, null,parentJob.getJobname());
Database.java(/kettle4.2/src-db/org/pentaho/di/core/database/Database.java)
3621-3670行添加一个多态函数
//增加同名函数,多一个jobName参数mengshanfengpublic void writeLogRecord(LogTableInterface logTable, LogStatus status, Object subject, Object parent,String jobName) throws KettleException { try { //增加jobName参数 mengshanfeng RowMetaAndData logRecord = logTable.getLogRecord(status, subject, parent,jobName); if (logRecord==null) return; boolean update = (logTable.getKeyField()!=null) && !status.equals(LogStatus.START); String schemaTable = databaseMeta.getQuotedSchemaTableCombination( environmentSubstitute(logTable.getActualSchemaName()), environmentSubstitute(logTable.getActualTableName()) ); RowMetaInterface rowMeta = logRecord.getRowMeta(); Object[] rowData = logRecord.getData(); if (update) { RowMetaInterface updateRowMeta = new RowMeta(); Object[] updateRowData = new Object[rowMeta.size()]; ValueMetaInterface keyValueMeta = rowMeta.getValueMeta(0); StringBuffer sqlBuff = new StringBuffer(250); sqlBuff.append("UPDATE ").append( schemaTable ).append(" SET "); for (int i = 1; i < rowMeta.size() ; i++) // Without ID_JOBor ID_BATCH { ValueMetaInterfacevalueMeta = rowMeta.getValueMeta(i); if (i>1) { sqlBuff.append(", "); } sqlBuff.append(databaseMeta.quoteField(valueMeta.getName())).append("=? "); updateRowMeta.addValueMeta(valueMeta); updateRowData[i-1] = rowData[i]; } sqlBuff.append("WHERE").append(databaseMeta.quoteField(keyValueMeta.getName())).append("=? "); updateRowMeta.addValueMeta(keyValueMeta); updateRowData[rowMeta.size()-1] = rowData[0]; String sql = sqlBuff.toString(); execStatement(sql, updateRowMeta, updateRowData); } else { insertRow(environmentSubstitute(logTable.getActualSchemaName()),environmentSubstitute(logTable.getActualTableName()), logRecord.getRowMeta(), logRecord.getData()); } } catch(Exception e) { throw new KettleDatabaseException("Unable to write log record to log table " + logTable.getActualTableName(), e); } }
最终修改列表如下:
/kettle4.2/src-db/org/pentaho/di/core/logging/LogTableInterface.java
/kettle4.2/src-db/org/pentaho/di/core/database/Database.java
/kettle4.2/src/org/pentaho/di/core/logging/ChannelLogTable.java
/kettle4.2/src/org/pentaho/di/core/logging/JobEntryLogTable.java
/kettle4.2/src/org/pentaho/di/core/logging/JobLogTable.java
/kettle4.2/src/org/pentaho/di/core/logging/PerformanceLogTable.java
/kettle4.2/src/org/pentaho/di/core/logging/StepLogTable.java
/kettle4.2/src/org/pentaho/di/core/logging/TransLogTable.java
/kettle4.2/src/org/pentaho/di/trans/Trans.java
编译进Jar,进行测试即可。
相关文章推荐
- 关于ajax前台验证用户名是否存在
- SQLServer控制用户访问权限表
- Writing an alsa driver译文-第二章 PCI驱动的基本流程
- 使用SAX方式解析XML
- Codeforces 13C Sequence
- What is PRM-DUL?
- Android开发:全面、易懂的Android屏幕适配解决方案
- MYSQL配置
- CSMA/CD 协议
- mysql 用户管理和权限设置
- 使用HttpSessionListener接口监听Session的创建和失效
- UVA - 10112 Myacm Triangles
- Codeforces Round #361 div2
- 未看记录
- 实习小记3
- UVA - 10387 Billiard
- HDOJ 1275 两车追及或相遇问题
- MySQL学习系列(2) -- MySQL数据库生产环境的安装和升级
- EventBus事件总线分发库
- UVA - 375 Inscribed Circles and Isosceles Triangles