【Log】日志模块代码优化

pull/3/head
chenjinlong 2021-02-01 20:06:12 +08:00
parent bbc35c8bbd
commit 11723cf6c1
15 changed files with 332 additions and 206 deletions

View File

@ -1,7 +1,7 @@
package cn.stylefeng.roses.kernel.log.api;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerParam;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerRequest;
import cn.stylefeng.roses.kernel.log.api.pojo.record.LogRecordDTO;
import java.util.List;
@ -19,32 +19,42 @@ public interface LogManagerApi {
/**
*
*
* @param logManagerParam
* @param logManagerRequest
* @return
* @author fengshuonan
* @date 2020/10/28 11:27
*/
List<LogRecordDTO> queryLogList(LogManagerParam logManagerParam);
List<LogRecordDTO> findList(LogManagerRequest logManagerRequest);
/**
*
*
* @param logManagerParam
* @param logManagerRequest
* @return
* @author luojie
* @date 2020/11/3 10:40
*/
PageResult<LogRecordDTO> queryLogListPage(LogManagerParam logManagerParam);
PageResult<LogRecordDTO> findPage(LogManagerRequest logManagerRequest);
/**
*
* <p>
*
*
* @param logManagerParam
* @param logManagerRequest
* @author fengshuonan
* @date 2020/10/28 11:47
*/
void deleteLogs(LogManagerParam logManagerParam);
void del(LogManagerRequest logManagerRequest);
/**
*
*
* @param
* @return
* @author chenjinlong
* @date 2021/2/1 19:47
*/
LogRecordDTO detail(LogManagerRequest logManagerRequest);
}

View File

@ -13,13 +13,23 @@ import java.util.List;
public interface LogRecordApi {
/**
*
*
*
* @param logRecordDTO
* @author fengshuonan
* @date 2020/10/27 17:38
*/
void recordLog(LogRecordDTO logRecordDTO);
void add(LogRecordDTO logRecordDTO);
/**
*
*
*
* @param logRecordDTO
* @author fengshuonan
* @date 2020/10/27 17:38
*/
void addAsync(LogRecordDTO logRecordDTO);
/**
*
@ -28,15 +38,7 @@ public interface LogRecordApi {
* @author majianguo
* @date 2020/11/2 2:59
*/
void recordLogByList(List<LogRecordDTO> logRecords);
void addBatch(List<LogRecordDTO> logRecords);
/**
*
*
* @param logRecordDTO
* @author fengshuonan
* @date 2020/10/27 17:38
*/
void recordLogAsync(LogRecordDTO logRecordDTO);
}

View File

@ -1,5 +1,6 @@
package cn.stylefeng.roses.kernel.log.api.factory;
import cn.hutool.core.util.IdUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.stylefeng.roses.kernel.log.api.constants.LogConstants;
import cn.stylefeng.roses.kernel.log.api.context.ServerInfoContext;
@ -26,6 +27,9 @@ public class LogRecordFactory {
public static LogRecordDTO createLogRecord(String name, Object content) {
LogRecordDTO logRecordDTO = new LogRecordDTO();
//设置全局id
logRecordDTO.setLogId(IdUtil.getSnowflake(1, 1).nextId());
// 设置日志名称
logRecordDTO.setLogName(name);

View File

@ -14,7 +14,7 @@ import javax.validation.constraints.NotBlank;
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class LogManagerParam extends BaseRequest {
public class LogManagerRequest extends BaseRequest {
/**
* id

View File

@ -13,6 +13,11 @@ import java.util.Date;
@Data
public class LogRecordDTO {
/**
* id
*/
private Long logId;
/**
*
*/

View File

@ -1,7 +1,7 @@
package cn.stylefeng.roses.kernel.log.modular.manage.controller;
import cn.stylefeng.roses.kernel.log.api.LogManagerApi;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerParam;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerRequest;
import cn.stylefeng.roses.kernel.log.db.service.SysLogService;
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
@ -43,8 +43,8 @@ public class LogManagerController {
* @date 2020/11/3 12:58
*/
@GetResource(name = "查询日志列表", path = "/logManager/list")
public ResponseData list(@RequestBody LogManagerParam logManagerParam) {
return new SuccessResponseData(logManagerApi.queryLogList(logManagerParam));
public ResponseData list(@RequestBody LogManagerRequest logManagerRequest) {
return new SuccessResponseData(logManagerApi.findList(logManagerRequest));
}
/**
@ -54,8 +54,8 @@ public class LogManagerController {
* @date 2021/1/8 17:36
*/
@GetResource(name = "查询日志列表", path = "/logManager/page")
public ResponseData page(LogManagerParam logManagerParam) {
return new SuccessResponseData(logManagerApi.queryLogListPage(logManagerParam));
public ResponseData page(LogManagerRequest logManagerRequest) {
return new SuccessResponseData(logManagerApi.findPage(logManagerRequest));
}
/**
@ -65,8 +65,8 @@ public class LogManagerController {
* @date 2020/11/3 13:47
*/
@PostResource(name = "删除日志", path = "/logManager/delete")
public ResponseData delete(@RequestBody @Validated(LogManagerParam.delete.class) LogManagerParam logManagerParam) {
logManagerApi.deleteLogs(logManagerParam);
public ResponseData delete(@RequestBody @Validated(LogManagerRequest.delete.class) LogManagerRequest logManagerRequest) {
logManagerApi.del(logManagerRequest);
return new SuccessResponseData();
}
@ -77,8 +77,8 @@ public class LogManagerController {
* @date 2021/1/11 17:36
*/
@GetResource(name = "查看日志详情", path = "/logManager/detail")
public ResponseData detail(@Validated(LogManagerParam.detail.class) LogManagerParam logManagerParam) {
return new SuccessResponseData(sysLogService.detail(logManagerParam));
public ResponseData detail(@Validated(LogManagerRequest.detail.class) LogManagerRequest logManagerRequest) {
return new SuccessResponseData(logManagerApi.detail(logManagerRequest));
}
}

View File

@ -142,7 +142,7 @@ public class RequestApiLogRecordAop implements Ordered {
ParamsLogAppender.appendAuthedHttpLog(logRecordDTO, params, result);
// 异步记录日志
logRecordApi.recordLogAsync(logRecordDTO);
logRecordApi.addAsync(logRecordDTO);
}
@Override
@ -174,7 +174,7 @@ public class RequestApiLogRecordAop implements Ordered {
for (int k = 0; k < args.length; k++) {
if (args[k] instanceof Model) {
classes[k] = Model.class;
} else if (args[k] instanceof MultipartFile) {
} else if (args[k] instanceof MultipartFile) {
classes[k] = MultipartFile.class;
} else {
classes[k] = args[k].getClass();
@ -198,10 +198,10 @@ public class RequestApiLogRecordAop implements Ordered {
// 装载参数名称和参数值
for (int i = 0; i < parameterNames.length; i++) {
// 解决上传文件接口aop记录日志报错
if (args[i] instanceof MultipartFile && args[i]!=null) {
if (args[i] instanceof MultipartFile && args[i] != null) {
// 根据参数名只记录文件名
paramMap.put(parameterNames[i], ((MultipartFile) args[i]).getOriginalFilename());
}else{
} else {
paramMap.put(parameterNames[i], args[i]);
}
@ -217,10 +217,10 @@ public class RequestApiLogRecordAop implements Ordered {
// 有异常则不显示参数名称直接返回参数
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof MultipartFile && args[i]!=null) {
if (args[i] instanceof MultipartFile && args[i] != null) {
// 根据参数名只记录文件名
paramMap.put("args" + i, ((MultipartFile) args[i]).getOriginalFilename());
}else {
} else {
paramMap.put("args" + i, args[i]);
}
}

View File

@ -1,21 +1,14 @@
package cn.stylefeng.roses.kernel.log.db;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
import cn.hutool.core.collection.CollUtil;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.log.api.LogManagerApi;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerParam;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerRequest;
import cn.stylefeng.roses.kernel.log.api.pojo.record.LogRecordDTO;
import cn.stylefeng.roses.kernel.log.db.entity.SysLog;
import cn.stylefeng.roses.kernel.log.db.service.SysLogService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@ -36,140 +29,35 @@ public class DbLogManagerServiceImpl implements LogManagerApi {
private SysLogService sysLogService;
@Override
public List<LogRecordDTO> queryLogList(LogManagerParam logManagerParam) {
PageResult<LogRecordDTO> logRecordDtoPageResult = queryLogListPage(logManagerParam);
return logRecordDtoPageResult.getRows();
public List<LogRecordDTO> findList(LogManagerRequest logManagerRequest) {
List<SysLog> sysLogList = this.sysLogService.findList(logManagerRequest);
List<LogRecordDTO> logRecordDTOList = CollUtil.newArrayList();
BeanUtil.copyProperties(sysLogList, logRecordDTOList);
return logRecordDTOList;
}
@Override
public PageResult<LogRecordDTO> queryLogListPage(LogManagerParam logManagerParam) {
if (ObjectUtil.isEmpty(logManagerParam)) {
return new PageResult<>();
}
public PageResult<LogRecordDTO> findPage(LogManagerRequest logManagerRequest) {
PageResult<SysLog> sysLogPageResult = this.sysLogService.findPage(logManagerRequest);
LambdaQueryWrapper<SysLog> sysLogLambdaQueryWrapper = new LambdaQueryWrapper<>();
// 创建查询条件
createQueryCondition(logManagerParam, sysLogLambdaQueryWrapper);
// 查询分页结果
Page<SysLog> objectPage = PageFactory.defaultPage();
Page<SysLog> page = sysLogService.page(objectPage, sysLogLambdaQueryWrapper);
PageResult<SysLog> pageResult = PageResultFactory.createPageResult(page);
PageResult<LogRecordDTO> logRecordDtoPageResult = new PageResult<>();
BeanUtil.copyProperties(pageResult, logRecordDtoPageResult);
return logRecordDtoPageResult;
// 分页类型转换
PageResult<LogRecordDTO> logRecordDTOPageResult = new PageResult<>();
BeanUtil.copyProperties(sysLogPageResult, logRecordDTOPageResult);
return logRecordDTOPageResult;
}
@Transactional(rollbackFor = {Exception.class})
@Override
public void deleteLogs(LogManagerParam logManagerParam) {
if (ObjectUtil.isEmpty(logManagerParam)) {
return;
}
// 获取参数
String beginDateTime = logManagerParam.getBeginDateTime();
String endDateTime = logManagerParam.getEndDateTime();
String appName = logManagerParam.getAppName();
LogManagerParam param = new LogManagerParam();
param.setBeginDateTime(beginDateTime);
param.setEndDateTime(endDateTime);
param.setAppName(appName);
LambdaQueryWrapper<SysLog> sysLogLambdaQueryWrapper = new LambdaQueryWrapper<>();
// 创建查询条件
createQueryCondition(param, sysLogLambdaQueryWrapper);
// 删除指定条件日志
sysLogService.remove(sysLogLambdaQueryWrapper);
public void del(LogManagerRequest logManagerRequest) {
this.sysLogService.del(logManagerRequest);
}
/**
*
*
* @param logManagerParam
* @param sysLogLambdaQueryWrapper mp
* @author luojie
* @date 2020/11/3 11:22
*/
private void createQueryCondition(LogManagerParam logManagerParam, LambdaQueryWrapper<SysLog> sysLogLambdaQueryWrapper) {
// 设置查询条件的起始时间和结束时间
if (StrUtil.isNotBlank(logManagerParam.getBeginDateTime()) && StrUtil.isNotBlank(logManagerParam.getEndDateTime())) {
sysLogLambdaQueryWrapper.between(SysLog::getCreateTime, logManagerParam.getBeginDateTime(), logManagerParam.getEndDateTime());
}
// 根据日志名称查询
String name = logManagerParam.getLogName();
if (StrUtil.isNotEmpty(name)) {
sysLogLambdaQueryWrapper.and(q -> {
q.eq(SysLog::getLogName, name);
});
}
// 根据服务名称查询
String appName = logManagerParam.getAppName();
if (StrUtil.isNotEmpty(appName)) {
sysLogLambdaQueryWrapper.and(q -> {
q.eq(SysLog::getAppName, appName);
});
}
// 根据服务端ip查询
String serverIp = logManagerParam.getServerIp();
if (StrUtil.isNotEmpty(serverIp)) {
sysLogLambdaQueryWrapper.and(q -> {
q.eq(SysLog::getServerIp, serverIp);
});
}
// 根据客户端请求的用户id查询
Long userId = logManagerParam.getUserId();
if (userId != null) {
sysLogLambdaQueryWrapper.and(q -> {
q.eq(SysLog::getUserId, userId);
});
}
// 根据客户端的ip查询
String clientIp = logManagerParam.getClientIp();
if (StrUtil.isNotEmpty(clientIp)) {
sysLogLambdaQueryWrapper.and(q -> {
q.eq(SysLog::getClientIp, clientIp);
});
}
// 根据当前用户请求的url查询
String url = logManagerParam.getRequestUrl();
if (StrUtil.isNotEmpty(clientIp)) {
sysLogLambdaQueryWrapper.and(q -> {
q.like(SysLog::getRequestUrl, url);
});
}
// 查询特定字段
sysLogLambdaQueryWrapper.select(
SysLog::getLogId,
SysLog::getLogName,
SysLog::getLogContent,
SysLog::getAppName,
SysLog::getRequestUrl,
SysLog::getServerIp,
SysLog::getClientIp,
SysLog::getUserId,
SysLog::getHttpMethod,
SysLog::getClientBrowser,
SysLog::getClientOs,
BaseEntity::getCreateTime,
BaseEntity::getUpdateTime);
// 根据时间倒序排序
sysLogLambdaQueryWrapper.orderByDesc(SysLog::getCreateTime);
@Override
public LogRecordDTO detail(LogManagerRequest logManagerRequest) {
SysLog detail = this.sysLogService.detail(logManagerRequest);
LogRecordDTO logRecordDTO = new LogRecordDTO();
BeanUtil.copyProperties(detail, logRecordDTO);
return logRecordDTO;
}
}

View File

@ -62,17 +62,17 @@ public class DbLogRecordServiceImpl implements LogRecordApi {
}
@Override
public void recordLog(LogRecordDTO logRecordDTO) {
public void add(LogRecordDTO logRecordDTO) {
if (logRecordDTO == null) {
return;
}
// 输出日志
recordLogByList(CollectionUtil.list(false, logRecordDTO));
addBatch(CollectionUtil.list(false, logRecordDTO));
}
@Override
public void recordLogByList(List<LogRecordDTO> logRecords) {
public void addBatch(List<LogRecordDTO> logRecords) {
if (ObjectUtil.isEmpty(logRecords)) {
return;
@ -101,7 +101,7 @@ public class DbLogRecordServiceImpl implements LogRecordApi {
}
@Override
public void recordLogAsync(LogRecordDTO logRecordDTO) {
public void addAsync(LogRecordDTO logRecordDTO) {
logManagerThreadPool.executeLog(new TimerTask() {
@Override
public void run() {
@ -217,7 +217,7 @@ public class DbLogRecordServiceImpl implements LogRecordApi {
}
// 调用方法刷新到磁盘
recordLogByList(cacheAll);
addBatch(cacheAll);
}
/**

View File

@ -1,9 +1,12 @@
package cn.stylefeng.roses.kernel.log.db.service;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerParam;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerRequest;
import cn.stylefeng.roses.kernel.log.db.entity.SysLog;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* service
*
@ -12,12 +15,58 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface SysLogService extends IService<SysLog> {
/**
*
*
* @param logManagerRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void add(LogManagerRequest logManagerRequest);
/**
*
*
* @param logManagerRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void del(LogManagerRequest logManagerRequest);
/**
*
*
* @param logManagerRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void delAll(LogManagerRequest logManagerRequest);
/**
*
*
* @author TSQ
* @date 2021/1/11 17:51
*/
SysLog detail(LogManagerParam logManagerParam);
SysLog detail(LogManagerRequest logManagerParam);
/**
* --
*
* @param logManagerParam
* @author chenjinlong
* @date 2021/1/26 12:52
*/
List<SysLog> findList(LogManagerRequest logManagerParam);
/**
* ---
*
* @param logManagerParam
* @author chenjinlong
* @date 2021/1/26 12:52
*/
PageResult<SysLog> findPage(LogManagerRequest logManagerParam);
}

View File

@ -1,12 +1,22 @@
package cn.stylefeng.roses.kernel.log.db.service.impl;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerParam;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerRequest;
import cn.stylefeng.roses.kernel.log.db.entity.SysLog;
import cn.stylefeng.roses.kernel.log.db.mapper.SysLogMapper;
import cn.stylefeng.roses.kernel.log.db.service.SysLogService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* service
*
@ -16,19 +26,89 @@ import org.springframework.stereotype.Service;
@Service
public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> implements SysLogService {
@Override
public SysLog detail(LogManagerParam logManagerParam) {
return this.querySysLog(logManagerParam);
public void add(LogManagerRequest logManagerRequest) {
SysLog sysLog = new SysLog();
BeanUtil.copyProperties(logManagerRequest, sysLog);
this.save(sysLog);
}
@Override
public void del(LogManagerRequest logManagerRequest) {
SysLog sysLog = this.querySysLogById(logManagerRequest);
this.removeById(sysLog.getLogId());
}
@Override
public void delAll(LogManagerRequest logManagerRequest) {
this.remove(null);
}
@Override
public SysLog detail(LogManagerRequest logManagerRequest) {
LambdaQueryWrapper<SysLog> queryWrapper = this.createWrapper(logManagerRequest);
return this.getOne(queryWrapper, false);
}
@Override
public List<SysLog> findList(LogManagerRequest logManagerRequest) {
LambdaQueryWrapper<SysLog> wrapper = this.createWrapper(logManagerRequest);
return this.list(wrapper);
}
@Override
public PageResult<SysLog> findPage(LogManagerRequest logManagerRequest) {
LambdaQueryWrapper<SysLog> wrapper = createWrapper(logManagerRequest);
Page<SysLog> page = this.page(PageFactory.defaultPage(), wrapper);
return PageResultFactory.createPageResult(page);
}
/**
* id
*
* @author chenjinlong
* @date 2021/1/26 13:28
*/
private SysLog querySysLogById(LogManagerRequest logManagerRequest) {
SysLog sysLog = this.getById(logManagerRequest.getLogId());
return sysLog;
}
/**
*
* queryWrapper
*
* @author TSQ
* @date 2021/1/11 17:54
* @author chenjinlong
* @date 2021/1/24 22:03
*/
private SysLog querySysLog(LogManagerParam logManagerParam) {
return this.getById(logManagerParam.getLogId());
private LambdaQueryWrapper<SysLog> createWrapper(LogManagerRequest logManagerRequest) {
LambdaQueryWrapper<SysLog> queryWrapper = new LambdaQueryWrapper<>();
String beginDateTime = logManagerRequest.getBeginDateTime();
String endDateTime = logManagerRequest.getEndDateTime();
// SQL条件拼接
String name = logManagerRequest.getLogName();
String appName = logManagerRequest.getAppName();
String serverIp = logManagerRequest.getServerIp();
Long userId = logManagerRequest.getUserId();
String clientIp = logManagerRequest.getClientIp();
String url = logManagerRequest.getRequestUrl();
queryWrapper.between(!StrUtil.isAllBlank(beginDateTime, endDateTime), SysLog::getCreateTime, beginDateTime, endDateTime);
queryWrapper.eq(StrUtil.isNotEmpty(name), SysLog::getLogName, name);
queryWrapper.eq(StrUtil.isNotEmpty(appName), SysLog::getAppName, appName);
queryWrapper.eq(StrUtil.isNotEmpty(serverIp), SysLog::getServerIp, serverIp);
queryWrapper.eq(ObjectUtil.isNotNull(userId), SysLog::getUserId, userId);
queryWrapper.eq(StrUtil.isNotEmpty(clientIp), SysLog::getClientIp, clientIp);
queryWrapper.eq(StrUtil.isNotEmpty(url), SysLog::getRequestUrl, url);
// 根据时间倒序排序
queryWrapper.orderByDesc(SysLog::getCreateTime);
return queryWrapper;
}
}

View File

@ -2,18 +2,18 @@ package cn.stylefeng.roses.kernel.log.file;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.log.api.LogManagerApi;
import cn.stylefeng.roses.kernel.log.api.exception.LogException;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerParam;
import cn.stylefeng.roses.kernel.log.api.pojo.manage.LogManagerRequest;
import cn.stylefeng.roses.kernel.log.api.pojo.record.LogRecordDTO;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.RandomAccessFile;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@ -38,6 +38,8 @@ public class FileLogManagerServiceImpl implements LogManagerApi {
private final String fileSavePath;
private Integer total;
/**
*
*
@ -48,14 +50,13 @@ public class FileLogManagerServiceImpl implements LogManagerApi {
}
@Override
public List<LogRecordDTO> queryLogList(LogManagerParam logManagerParam) {
logManagerParam.setPageSize(1000);
PageResult<LogRecordDTO> pageResult = queryLogListPage(logManagerParam);
public List<LogRecordDTO> findList(LogManagerRequest logManagerParam) {
PageResult<LogRecordDTO> pageResult = findPage(logManagerParam);
return pageResult.getRows();
}
@Override
public PageResult<LogRecordDTO> queryLogListPage(LogManagerParam logManagerParam) {
public PageResult<LogRecordDTO> findPage(LogManagerRequest logManagerParam) {
// 文件日志必须有AppName,否则文件太多太大
if (ObjectUtil.isEmpty(logManagerParam.getAppName())) {
@ -93,12 +94,12 @@ public class FileLogManagerServiceImpl implements LogManagerApi {
// 读取日志
List<LogRecordDTO> dtos = readLog(filePath, filePointer, logManagerParam.getPageSize());
pageResult.setRows(dtos);
pageResult.setTotalRows(total);
return pageResult;
}
@Override
public void deleteLogs(LogManagerParam logManagerParam) {
public void del(LogManagerRequest logManagerParam) {
// 删除操作,必须有appName
if (ObjectUtil.isEmpty(logManagerParam.getAppName())) {
@ -131,6 +132,24 @@ public class FileLogManagerServiceImpl implements LogManagerApi {
}
}
@Override
public LogRecordDTO detail(LogManagerRequest logManagerRequest) {
// 文件日志必须有AppName,否则文件太多太大
if (ObjectUtil.isEmpty(logManagerRequest.getAppName())) {
throw new LogException(APP_NAME_NOT_EXIST);
}
// 文件日志,必须有开始时间,否则文件太多太大
if (ObjectUtil.isEmpty(logManagerRequest.getBeginDateTime())) {
throw new LogException(BEGIN_DATETIME_NOT_EXIST);
}
// 获取文件路径
String filePath = getLogPath(logManagerRequest.getAppName(), logManagerRequest.getBeginDateTime());
return this.readLog(filePath, logManagerRequest.getLogId());
}
/**
* app
*
@ -150,6 +169,49 @@ public class FileLogManagerServiceImpl implements LogManagerApi {
return fileAbsolutePath + fileName;
}
/**
* id
*
* @param
* @return
* @author chenjinlong
* @date 2021/2/1 19:54
*/
private LogRecordDTO readLog(String path, Long logId) {
// 判断文件是否存在,不存在直接返回Null
if (!FileUtil.exist(path)) {
return null;
}
LogRecordDTO logRecordDTO = new LogRecordDTO();
RandomAccessFile file;
try {
// 创建随机读文件流
file = new RandomAccessFile(path, "r");
while (true) {
String str = file.readLine();
// 读取到的字符串不为空
if (ObjectUtil.isNotEmpty(str)) {
logRecordDTO = parseObject(str);
if (logRecordDTO.getLogId().equals(logId)) {
return logRecordDTO;
}
}
}
} catch (Exception e) {
if (log.isDebugEnabled()) {
e.printStackTrace();
}
log.error(e.getMessage());
}
return logRecordDTO;
}
/**
* ,
*
@ -191,8 +253,12 @@ public class FileLogManagerServiceImpl implements LogManagerApi {
}
}
//获取总行数
total = getTotalLines(new File(path));
// 在用户信息中记录当前用户读取的文件指针
LoginContext.me().getLoginUser().getOtherInfos().put("filePointer", file.getFilePointer());
LoginContext.me().getLoginUser().setOtherInfos(Dict.create().set("filePointer", file.getFilePointer()));
} catch (Exception e) {
if (log.isDebugEnabled()) {
@ -280,4 +346,21 @@ public class FileLogManagerServiceImpl implements LogManagerApi {
return list;
}
/**
*
*
* @param file
* @return
* @author chenjinlong
* @date 2021/2/1 19:45
*/
public int getTotalLines(File file) throws IOException {
FileReader in = new FileReader(file);
LineNumberReader reader = new LineNumberReader(in);
reader.skip(Long.MAX_VALUE);
int lines = reader.getLineNumber();
reader.close();
return lines;
}
}

View File

@ -59,14 +59,14 @@ public class FileLogRecordServiceImpl implements LogRecordApi {
* @date 2020/10/28 15:53
*/
@Override
public void recordLog(LogRecordDTO logRecordDTO) {
public void add(LogRecordDTO logRecordDTO) {
if (logRecordDTO == null) {
return;
}
// 输出日志
recordLogByList(CollectionUtil.list(false, logRecordDTO));
addBatch(CollectionUtil.list(false, logRecordDTO));
}
/**
@ -77,7 +77,7 @@ public class FileLogRecordServiceImpl implements LogRecordApi {
* @date 2020/11/2 2:59
*/
@Override
public void recordLogByList(List<LogRecordDTO> list) {
public void addBatch(List<LogRecordDTO> list) {
if (ObjectUtil.isEmpty(list)) {
return;
@ -119,7 +119,7 @@ public class FileLogRecordServiceImpl implements LogRecordApi {
}
@Override
public void recordLogAsync(LogRecordDTO logRecordDTO) {
public void addAsync(LogRecordDTO logRecordDTO) {
logManagerThreadPool.executeLog(new TimerTask() {
@Override
public void run() {
@ -242,7 +242,7 @@ public class FileLogRecordServiceImpl implements LogRecordApi {
}
// 调用方法刷新到磁盘
recordLogByList(cacheAll);
addBatch(cacheAll);
} catch (Exception e) {

View File

@ -46,7 +46,7 @@ public interface SysLoginLogService extends IService<SysLoginLog>, LoginLogServi
* @author chenjinlong
* @date 2021/1/13 10:55
*/
void delete(SysLoginLogRequest sysLoginLogRequest);
void del(SysLoginLogRequest sysLoginLogRequest);
/**

View File

@ -79,19 +79,21 @@ public class SysLoginLogServiceImpl extends ServiceImpl<SysLoginLogMapper, SysLo
this.save(sysLoginLog);
}
@Override
public void delete(SysLoginLogRequest sysLoginLogRequest) {
}
@Override
public void deleteAll() {
this.remove(null);
}
@Override
public void del(SysLoginLogRequest sysLoginLogRequest) {
SysLoginLog sysLoginLog = this.querySysLoginLogById(sysLoginLogRequest);
this.removeById(sysLoginLog.getLlgId());
}
@Override
public SysLoginLog detail(SysLoginLogRequest sysLoginLogRequest) {
return this.querySysLoginLog(sysLoginLogRequest);
LambdaQueryWrapper<SysLoginLog> queryWrapper = this.createWrapper(sysLoginLogRequest);
return this.getOne(queryWrapper, false);
}
@Override
@ -108,7 +110,7 @@ public class SysLoginLogServiceImpl extends ServiceImpl<SysLoginLogMapper, SysLo
* @author chenjinlong
* @date 2021/1/13 10:50
*/
private SysLoginLog querySysLoginLog(SysLoginLogRequest sysLoginLogRequest) {
private SysLoginLog querySysLoginLogById(SysLoginLogRequest sysLoginLogRequest) {
SysLoginLog sysLoginLog = this.getById(sysLoginLogRequest.getLlgId());
if (ObjectUtil.isNull(sysLoginLog)) {
throw new ServiceException(AppExceptionEnum.APP_NOT_EXIST);
@ -124,9 +126,12 @@ public class SysLoginLogServiceImpl extends ServiceImpl<SysLoginLogMapper, SysLo
*/
private LambdaQueryWrapper<SysLoginLog> createWrapper(SysLoginLogRequest sysLoginLogRequest) {
LambdaQueryWrapper<SysLoginLog> queryWrapper = new LambdaQueryWrapper<>();
// SQL条件拼接
queryWrapper.eq(StrUtil.isNotBlank(sysLoginLogRequest.getLlgName()), SysLoginLog::getLlgName, sysLoginLogRequest.getLlgName());
queryWrapper.ge(StrUtil.isNotBlank(sysLoginLogRequest.getBeginTime()), SysLoginLog::getCreateTime, sysLoginLogRequest.getBeginTime());
queryWrapper.le(StrUtil.isNotBlank(sysLoginLogRequest.getEndTime()), SysLoginLog::getCreateTime, sysLoginLogRequest.getEndTime());
return queryWrapper;
}