最近在实现一个功能:用户在前端页面触发Docker镜像构建,后端监听Docker镜像的构建状态,并将Docker镜像的构建日志保存到HDFS,之后用户可以随时在前端看到本次构建的日志。
从HDFS读取日志是用下面的方式实现的:
try(final FSDataInputStream inputStream = this.open(hdfsPath)){
return inputStream.readUTF();
}catch (Exception e){
log.error(e.getMessage() ,e);
throw new AlphaException(READ_COMPILE_LOG_ERROR);
}
但通过这种方式读取时最多只能读取1K数据,导致日志不完整。
通过下面的方式可以实现日志的完整读取:
try(final FSDataInputStream inputStream = this.open(hdfsPath)){
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copyBytes(inputStream,baos, 1024);
return new String(baos.toByteArray());
}catch (Exception e){
log.error(e.getMessage() ,e);
throw new AlphaException(READ_COMPILE_LOG_ERROR);
}
网友评论