从服务器中把项目运行的日志导出

机缘

项目要求:提供一个接口把服务器中的日志导出来


收获

自己利用流的方式进行处理,测试后比很多博主用的快


步骤

  1. 知道项目中日志位置
  2. 写一个接口
  3. 给方法去一个见名知义的英文名
  4. 看看代
        @GetMapping("/download/{type}")
        public LinResponse download(@PathVariable String type, HttpServletResponse response) throws Exception {
            try {
                // 服务器文件路径
                String fwPath = "D:\\home\\admin\\noautobreakerwarning\\logs";
                //String fwPath = "/home/admin/noautobreakerwarning/logs";
                // 下载文件
                RemoteCommandUtil.downloadFile(type, fwPath, response);
                return LinResponse.Builder.buildSucced();
            } catch (Exception e) {
                log.error("导出日志文件出现异常,请查看详情:{}", ExceptionUtils.getStackTrace(e));
                throw new NoAutoBreakerException(27, "当前没有这个文件日志");
            }
        }
    
    
    
    
    
    
    /**
         * - 实现下载服务器上的文件到本地指定目录
         */
        public static void downloadFile(String type, String basePath, HttpServletResponse response) throws IOException {
            String path;
            if (!idNumberStr(type)) {
                path = basePath + "/" + type + ".log";
            } else {
                path = basePath + "/" + type + ".bak";
            }
            File file = new File(path);
            if (!file.exists()) {
                throw new NoAutoBreakerException(27, "当前没有这个文件日志");
            }
            BufferedInputStream sis = new BufferedInputStream(new FileInputStream(file));
            BufferedOutputStream fos = new BufferedOutputStream(response.getOutputStream());
            try {
                byte[] b = new byte[4096];
                int i;
                while ((i = sis.read(b)) != -1) {
                    fos.write(b, 0, i);
                }
                log.info("下载完成");
            } catch (IOException e) {
                log.info("文件不存在或连接失败");
                e.printStackTrace();
            } finally {
                log.info("服务关闭");
                fos.flush();
                fos.close();
                sis.close();
            }
        }
    码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值