package com.vci.ubcs.log.service.impl;
|
|
import com.vci.ubcs.log.service.ILogSystemService;
|
import com.vci.ubcs.log.entity.SystemLog;
|
import org.springblade.core.log.exception.ServiceException;
|
import com.vci.ubcs.omd.cache.EnumCache;
|
import com.vci.ubcs.omd.enums.EnumEnum;
|
import com.vci.ubcs.resource.bo.FileObjectBO;
|
import org.springblade.core.tool.utils.Func;
|
import org.springframework.stereotype.Service;
|
import java.io.File;
|
import java.io.IOException;
|
import java.nio.file.FileSystems;
|
import java.nio.file.Files;
|
import java.nio.file.Path;
|
import java.nio.file.attribute.BasicFileAttributes;
|
import java.rmi.ServerException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
/**
|
* 本地系统日志
|
* @author ludc
|
* @date 2023/10/31 15:39
|
*/
|
@Service
|
public class LogSystemServiceImpl implements ILogSystemService{
|
|
/**
|
* 各个服务存放的的父路径
|
*/
|
private final String parentPath = "/data1/ubcs/ubcs-server";
|
|
/**
|
* 各个服务的日志具体的目录路径
|
*/
|
//@Value("#{'${ip-whitelist.ip}'.split(',')}")
|
private List<String> serviceDirNames = new ArrayList<>(Arrays.asList("/ubcs_code/target/log","/ubcs_omd/target/log","/ubcs_system/target/log"));
|
|
/**
|
* 获取本地日志列表
|
* @param logParentPath
|
* @return
|
*/
|
@Override
|
public List<SystemLog> getSystemLogList(String logParentPath) {
|
List<SystemLog> systemLogs = new ArrayList<>();
|
// 不为空说明是加载当前这个服务路径下的日志文件
|
if(Func.isNotEmpty(logParentPath)){
|
File file = new File(logParentPath);
|
if (file.isDirectory()) {
|
File[] files = file.listFiles();
|
Arrays.stream(files).forEach(item->{
|
// 组建日志文件对象
|
SystemLog systemLog = new SystemLog();
|
systemLog.setLogName(item.getName());
|
systemLog.setLogType(getLogType(item.getName()));
|
systemLog.setCreateTime(getLastModifiedOrCreatTime(false,logParentPath));
|
systemLog.setLastmodifier(getLastModifiedOrCreatTime(true,logParentPath));
|
systemLog.setLogPath(logParentPath);
|
String serviceId = getServiceId(logParentPath);
|
systemLog.setServiceId(serviceId);
|
systemLog.setServiceName(getServiceName(serviceId));
|
systemLogs.add(systemLog);
|
});
|
}
|
}else {
|
serviceDirNames.stream().forEach(serviceDirName->{
|
File file = new File(parentPath+serviceDirName);
|
SystemLog systemLog = new SystemLog();
|
systemLog.setLastmodifier(getLastModifiedOrCreatTime(true,parentPath+serviceDirName));
|
systemLog.setCreateTime(getLastModifiedOrCreatTime(false,parentPath+serviceDirName));
|
systemLog.setLogPath(parentPath+serviceDirName);
|
String serviceId = getServiceId(logParentPath);
|
systemLog.setServiceId(serviceId);
|
systemLog.setServiceName(getServiceName(serviceId));
|
systemLogs.add(systemLog);
|
});
|
}
|
return systemLogs;
|
}
|
|
/**
|
* 获取文件最后修改或者创建时间
|
* @param isModifier
|
* @return
|
*/
|
private String getLastModifiedOrCreatTime(boolean isModifier,String pathStr) {
|
Path path = FileSystems.getDefault().getPath(pathStr);
|
String date = "";
|
try {
|
BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class);
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
// 是获取最后修改时间
|
if(isModifier){
|
date = dateFormat.format(new Date(attr.lastModifiedTime().toMillis()));
|
}else {
|
date = dateFormat.format(new Date(attr.creationTime().toMillis()));
|
}
|
} catch (IOException e) {
|
throw new ServiceException("Error reading file date attributes: " + e.getMessage());
|
}
|
return date;
|
}
|
|
/**
|
* 获取日志类型
|
* @param fileName
|
* @return
|
*/
|
private String getLogType(String fileName){
|
//判断日志的的类型
|
if (fileName.contains("error")) {
|
return "Error";
|
} else if (fileName.contains("info")) {
|
return "Info";
|
} else if (fileName.contains("warning")) {
|
return "Warning";
|
} else {
|
return "Unknown";
|
}
|
}
|
|
/**
|
* 获取服务ID
|
* @param servciePath
|
* @return
|
*/
|
private String getServiceId(String servciePath){
|
String[] parts = servciePath.split("/");
|
String extractedString = parts[parts.length - 2];
|
return extractedString;
|
}
|
|
/**
|
* 获取服务名称
|
* @param serViceId
|
* @return
|
*/
|
private String getServiceName(String serViceId){
|
return EnumCache.getValue(EnumEnum.SERCIVE_NAME_ROLE, serViceId);
|
}
|
|
/**
|
* 下载日志文件
|
* @param condition 查询条件map
|
* @return
|
* @throws ServerException
|
*/
|
@Override
|
public FileObjectBO downloadLogByServiceNameAndFileName(Map<String, String> condition) throws ServerException {
|
return null;
|
}
|
|
/**
|
* 删除日志文件
|
* @param condition 主键集合
|
* @throws ServerException
|
*/
|
@Override
|
public void deleteLogFile(Map<String, String> condition) throws ServerException {
|
|
}
|
|
}
|