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中拿出来!!!
已正常运行两天,无报错。