kettle5+日志输出到文件

kettle 5+的日志模块重写了,将log4j改成插件,但存在BUG,无法正法初始化,


可以查看相关文章http://jira.pentaho.com/browse/PDI-13206


导致的问题就是在程序中调用kettle时,日志只能打在控制台,无法输出到日志文件,


解决办法:


在环境初始化时


KettleEnvironment.init();
KettleClientEnvironment.getInstance().setClient( KettleClientEnvironment.ClientType.CARTE );


加入
LoggingBuffer loggingBuffer = KettleLogStore.getAppender();
loggingBuffer.addLoggingEventListener(new Log4jLogging());


再在classpath下增加log4j.xml


可以拷贝老版本中的这个文件,新版中默认没有了


在这个文件中,加入


<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="../logs/waqs.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"   
   value="%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} - %m%n" />
</layout>
</appender>


<category name="org.pentaho.di" additivity="false">
<priority value="DEBUG"/>
<appender-ref ref="fileAppender"/>
</category>


这样就可以在tomcat下的logs中找到输出日志了


参考文章:http://forums.pentaho.com/showthread.php?156592-Kettle-5-0-1-Log4j-plugin-usage

<think>好的,用户现在的问题是关于Kettle的Excel输出是否必须是空文件,以及如何解决缓存问题,特别是在Windows安装位置变更的情况下。我需要结合之前的对话历史和提供的引用来回答。 首先,用户之前遇到的是移动Kettle安装位置后缓存仍指向旧目录的问题,我之前给出的解决方案涉及环境变量、配置迁移和清理缓存。现在用户的新问题可能与此相关,但具体是关于Excel输出的空文件和缓存问题。 用户提到的引用中,引用1提到Kitchen和Pan是命令行工具,需要关注网络性能,这可能与数据处理和输出有关。引用3提到Kettle处理大型应用的性能,可能Excel输出如果处理不当会影响性能或导致问题。 用户现在想知道Excel输出是否必须为空文件。根据我的知识,Kettle的Excel输出步骤确实需要目标文件存在且为空,否则会报错。这可能是因为Kettle的设计是覆盖写入,而不是追加。需要确认这一点,并给出解决方案,比如每次生成新文件或使用动态文件名。 然后是缓存问题,用户之前移动了安装位置,可能缓存仍然指向旧路径,导致输出到错误的目录。需要指导用户检查临时目录的设置,比如kettle.properties中的TEMP_FILE_PATH,以及环境变量是否正确指向新路径。此外,可能需要清理旧的缓存文件,如之前提到的.kettle目录和Pentaho的缓存。 还要考虑Excel输出时的流处理问题,如果数据量大,可能需要调整提交记录数,避免内存不足,导致输出为空或部分数据丢失。同时,确认是否启用了延迟转换,这可能导致数据未正确写入。 另外,用户提到Windows安装位置变更,可能需要检查Kettle的工作目录或日志路径是否仍指向旧位置,影响Excel文件的生成路径。需要确保所有相关配置都更新到新路径,并清理旧缓存。 最后,结合之前的回答,用户可能需要迁移配置文件,设置正确的环境变量,并调整Excel输出步骤的参数,比如覆盖文件、使用动态文件名和调整提交大小。同时,处理缓存问题需要确保临时目录正确,并清理旧缓存。</think>### Kettle Excel输出文件限制与缓存问题的解决方案 针对Kettle中Excel输出步骤的空文件限制及因安装位置变更引发的缓存问题,以下是结合Windows环境的具体解决方案: --- #### 一、Excel输出文件限制的本质 1. **核心机制** Kettle的Excel输出步骤默认要求目标文件**必须为空**,否则会报错`File exists and is not empty`。这是为了防止意外覆盖现有数据,但可通过以下配置绕过: ```properties # 在kettle.properties中强制启用覆盖模式 EXCEL_OUTPUT_OVERWRITE = Y ``` 2. **动态文件名方案** 通过转换参数实现按时间戳生成唯一文件名: - 添加「生成随机数」步骤,创建`${Internal.Transformation.Filename.Unique}`变量 - 在Excel输出步骤的文件名中使用:`output_${timestamp}.xlsx` --- #### 二、缓存问题的双重处理(安装位置变更场景) 1. **临时文件路径重置** 修改`kettle.properties`中的缓存目录指向新安装路径: ```properties # 原配置(旧路径) TEMP_FILE_PATH=C:/old_kettle/temp # 修改后(新路径) TEMP_FILE_PATH=D:/new_kettle/temp ``` - 此路径存储Excel输出时的临时缓存文件[^1] 2. **内存缓冲优化** 在Excel输出步骤中调整参数: ```properties # 每1000行提交一次(默认值过高易导致内存溢出) "Commit size" = 1000 # 启用流式处理模式 "Streaming data" = true ``` --- #### 三、安装路径变更引发的关联配置 | 配置项 | 检查路径 | 修改方法 | |-------|---------|----------| | 日志文件存储 | `logging.properties` | 更新`log_file_dir`参数 | | 插件缓存 | `plugins/`目录 | 重新指定`KETTLE_PLUGIN_BASE_FOLDERS`环境变量 | | 资源库连接 | `shared.xml` | 验证数据库驱动路径是否包含空格(常见于新路径) | --- #### 四、典型故障排查流程 1. **现象**:Excel输出步骤执行成功但文件为空 - 检查转换是否启用「延迟转换」(Transformation Delay),该模式会抑制实际输出 - 验证字段映射是否正确,空数据会导致生成0KB文件 2. **现象**:报错`Unable to create parent folder` - 确认输出目录权限:右键文件夹→属性→安全→添加`Users`组完全控制权限 - 禁用杀毒软件实时监控(常见于企业版Windows Defender拦截) --- #### 五、性能增强建议 1. **使用Excel 2007+格式** XLSX格式比XLS支持更大数据集(104万行 vs 6.5万行)[^3] 2. **启用并行输出** ```sql -- 在「表输入」步骤设置多线程查询 SELECT * FROM table WHERE id % ${THREAD_NUM} = ${THREAD_ID} ``` --- --相关问题--: 1. 如何通过Kettle实现Excel文件的追加写入而非覆盖? 2. Kettle输出CSV文件时是否也有空文件限制? 3. Windows环境下如何监控Kettle的临时文件读写性能?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onemy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值