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 serviceDirNames = new ArrayList<>(Arrays.asList("/ubcs_code/target/log","/ubcs_omd/target/log","/ubcs_system/target/log")); /** * 获取本地日志列表 * @param logParentPath * @return */ @Override public List getSystemLogList(String logParentPath) { List 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 condition) throws ServerException { return null; } /** * 删除日志文件 * @param condition 主键集合 * @throws ServerException */ @Override public void deleteLogFile(Map condition) throws ServerException { } }