irpas技术客

记一次Kafka log4j报错 windows_洛日飞车

网络 6269

log4j:ERROR Failed to rename [D:\kafka_2.12-2.8.0/logs/controller.log] to [D:\kafka_2.12-2.8.0/logs/controller.log.2022-03-15-17]

FIRST

前提是zookeeper输出日志、Kafka日志输出目录都已经修改过了,\ 转为 \ \

可以看到路径有问题,修改log4j配置文件(Kafka根目录下的config)

SECOND

第二天发现依然有报错,不过controller.log前的路径从 / 变成了 \ 问大佬,要修改${kafka_home}\bin\windows\kafka-run-class.bat中,如下图所示位置 尝试将 /log 改成 \ \ log

第二天查看,报错变成了 再将 \ \ log 改为 \log,观察。

THIRD

网传需要修改log4jjar包源码 DailyRollingFileAppender.java 中的

File file = new File(fileName); boolean result = file.renameTo(target); if (result) { LogLog.debug(fileName + " -> " + scheduledFilename); } else { LogLog.error("Failed to rename [" + fileName + "] to [" + scheduledFilename + "]."); }

修改为

File file = new File(fileName); boolean result = copy(file, target); if (result) { FileWriter fw = new FileWriter(file); fw.write(""); fw.flush(); fw.close(); LogLog.debug(fileName + " -> " + scheduledFilename); } else { LogLog.error("Failed to rename [" + fileName + "] to [" + scheduledFilename + "]."); }

并增加copy方法

/** * Copies src file to dst file. If the dst file does not exist, it is * created.8KB cache * * @param src * @param dst * @throws IOException */ boolean copy(File src, File dst) throws IOException { try { InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dst); // Transfer bytes from in to out byte[] buf = new byte[8192]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); return true; } catch (FileNotFoundException e) { LogLog.error("源文件不存在,或者目标文件无法被识别." ); return false; } catch (IOException e) { LogLog.error("文件读写错误."); return false; } }

修改后打包,上传,再探,再报。原先的jar包要从lib中拿出来!!!

已正常运行两天,无报错。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #记一次Kafka #log4j报错 #Windows #log4jERROR #failed #To #rename