记一次Kafka log4j报错 windows

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中拿出来!!!

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

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值