若依ruoyi 系统日志导出

业务需求说明:仅admin用户可导出若依系统产生的日志

前端代码

index.vue

<template>
  <div class="details-content">
    <div class="box-card">
      <el-tabs type="border-card" v-model="activeTab" class="el-tab">
        <el-tab-pane name="tabSysLog" class="el-tab-pane">
          <span slot="label">日志导出</span>
          <div class="details-content">
            <el-form ref="form" :model="logData" label-width="120px" class="main-form">
              <el-row>
                <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
                  <el-form-item label="日志类型" prop="logType">
                    <el-select v-model="logData.logType">
                      <el-option value="info" label="info"></el-option>
                      <el-option value="error" label="error"></el-option>
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
                  <el-form-item label="日志日期">
                    <el-date-picker
                      type="date"
                      placeholder="选择日志日期"
                      v-model="logData.date"
                      style="width: 100%;"
                    ></el-date-picker>
                  </el-form-item>
                </el-col>
                <el-col>
                  <el-form-item size="large">
                    <el-button type="primary" @click="submit">导出日志</el-button>
                  </el-form-item>
                </el-col>
              </el-row>
            </el-form>
          </div>
        </el-tab-pane>
      </el-tabs>
    </div>
  </div>
</template>

<script>
import { logDownload } from '@/api/system/common'
import { parseTime } from '@/utils/ruoyi'
import { saveAs } from 'file-saver'

export default {
  name: 'logExport',
  data() {
    return {
      logData: {},
      form: {},
      activeTab: 'tabSysLog',
      logName: 'ruoyi-',
    }
  },
  methods: {
    saveAs(text, name, opts) {
      saveAs(text, name, opts)
    },
    submit() {
      const that = this
      const logDate = parseTime(this.logData.date, '{y}-{m}-{d}')
      let param = this.logName + this.logData.logType + '.' + logDate + '.log'
      if (logDate == parseTime(new Date(), '{y}-{m}-{d}')) {
        param = this.logName + this.logData.logType + '.log'
      }
      logDownload(param).then((blob) => {
        that.saveAs(blob, decodeURI(param))
      })
    },
  },
}
</script>

<style>
.box-card {
  margin: 4px 10px 4px 10px;
}
.el-tab-pane {
  min-height: 450px;
}
.dynamicBreadCrumb {
  margin-bottom: 3px;
}
.el-tabs__item {
  cursor: default !important;
}
.main-form {
  margin: 10px;
}

.tip {
  padding: 8px 16px;
  background-color: #ecf8ff;
  border-radius: 4px;
  border-left: 5px solid #50bfff;
  margin: 20px 20px 0px 20px;
  font: small-caption;
}
</style>

common.js

import request from '@/utils/request'

// 系统日志下载
export function logDownload(params) {
  return request({
    url: '/common/logDownload?fileName=' + params,
    method: 'get',
    responseType: 'blob'
  })
}

后端代码

// 当前启动的环境
@Value("${spring.profiles.active}")
private String activeProfile;


/**
 * 日志下载方法
 * @param fileName
 * @param response
 * @param request
 */
@GetMapping("/common/logDownload")
public void logFileDownload(String fileName, HttpServletResponse response, HttpServletRequest request)
{
    try
    {
        if(!SecurityUtils.getLoginUser().getUser().isAdmin()){
            throw new BaseException("非管理员,取法下载该文件。");
        }
        String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
        String diskPath = "local".equals(activeProfile)? "D:/home/ruoyi/logs/": "/home/ruoyi/logs/";
        String filePath = diskPath + fileName;
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
        FileUtils.setAttachmentResponseHeader(response, realFileName);
        FileUtils.writeBytes(filePath, response.getOutputStream());
    }
    catch (Exception e)
    {
        log.error("下载文件失败", e);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值