业务需求说明:仅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);
}
}