java在线读取项目系统日志 页面方式查看log日志

在线读取/显示项目系统 日志/log日志在线显示

效果如下:

1、显示项目文件夹

显示项目文件夹

2、进入文件夹后显示三种日志

进入文件夹后显示三种日志

3、显示具体的日志页面

显示具体的日志页面

功能实现

第一步:配置 读取 项目文件夹 权限

例如:E:/ccz/yundianba-project/ 是【1、显示项目文件夹】当前路径

web.file-path=E:/ccz/yundianba-project/
spring.resources.static-locations= classpath:/templates/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web.logo-path},file:${web.file-path}

第二步:代码编写

java代码 功能代码

/**
 * 描述:
 * 读取日志文件
 * @author 闲走天涯
 * @create 2021/7/14 17:01
 */
@Slf4j
@RestController
@RequestMapping("/logger")
public class LogFloderController {

    @Value("${web.file-path:}")
    private String path;
    @Value("${ydb-mgURL:}")
    private String domain;

    @RequestMapping("/getLogFloder")
    public Map getLogFloder(String path, String pathFloder){
        //log.info("【读取日志文件】参数path={},pathFloder={}",path,pathFloder);
        Map result = new HashMap();
        result.put("code","1");
        List<String> list = getFileFloder(path,pathFloder);
        if(list!=null){
            result.put("code","3");
            result.put("msg","查询成功");
            result.put("data",list);
        }else{
            result.put("code","1");
            result.put("msg","查询失败");
        }
        return result;
    }

    @RequestMapping("/getBasic")
    public Map getBasic(){
        Map result = new HashMap();
        result.put("code","1");
        if(VerifyData.strIsNotNull(domain) && VerifyData.strIsNotNull(path)) {
            result.put("code","3");
            path = path.replaceAll("\\\\","/");
            result.put("domain", domain);
            result.put("path", path);
        }
        return result;
    }

    /**
     * 读取文件夹
     * @param path
     * @return
     */
    public List<String> getFileFloder(String path, String pathFloder){
        List<String> nameList = new ArrayList<>();
        String type = "";
        try {
            pathFloder = pathFloder.replaceAll("\\\\","/");
            if(!"".equals(pathFloder) && pathFloder!=null){
                if (pathFloder.indexOf("/info") != -1) {
                    type = "info";
                }
                if (pathFloder.indexOf("/error") != -1) {
                    type = "error";
                }
                if (pathFloder.indexOf("/warn") != -1) {
                    type = "warn";
                }
                if("".equals(type) || type==null) {
                    nameList.add("info");
                    nameList.add("error");
                    nameList.add("warn");
                    return nameList;
                }
            }
            ArrayList<String> listFileName=new ArrayList<String>();
            getFileName(path, listFileName);    //需要读取的文件位置
            for (String name : listFileName) {
                name = name.replaceAll("\\\\","/");
                if ("".equals(pathFloder) || pathFloder == null) {
                    if (!name.contains(".log") && name.indexOf(".") == -1) {    //文件类型
                        name = name.replace(path,"");
                        if(!nameList.contains(name) && name.indexOf("/")==-1){
                            nameList.add(name);
                        }
                    }
                } else {
                    String backpage = pathFloder.replace("/"+type,"");
                    backpage = backpage.replace("/","");
                    if (name.contains(".log") && name.contains("/"+backpage+"/") && name.contains("log-" + type)) {
                        nameList.add(name);
                    }
                }
            }
            //log.info("【读取日志文件】输出文件名称数量="+nameList.size());
            if(nameList==null || nameList.size()==0){return null;}
            if(nameList.get(0).contains("log-info-")
                    || nameList.get(0).contains("log-error-")
                    || nameList.get(0).contains("log-warn-")){
                //根据时间进行升序排序
                Collections.sort(nameList, new Comparator<String>() {
                    @Override
                    public int compare(String o1, String o2) {
                        String type="",time1 = "",id1="",time2="",id2="";
                        if(o1.contains("log-info-")){
                            type="log-info-";
                        }else if(o1.contains("log-error-")){
                            type="log-error-";
                        }else if(o1.contains("log-warn-")){
                            type="log-warn-";
                        }
                        time1 = o1.substring(o1.indexOf(type),o1.length());
                        time1 = time1.replace(".log","");
                        id1 = time1.substring(time1.lastIndexOf(".")+1,time1.length());
                        time1 = time1.substring(0,time1.lastIndexOf("."));

                        time2 = o2.substring(o2.indexOf(type),o2.length());
                        time2 = time2.replace(".log","");
                        id2 = time2.substring(time2.lastIndexOf(".")+1,time2.length());
                        time2 = time2.substring(0,time2.lastIndexOf("."));
                        if(time1.compareTo(time2)==0){
                            return id2.compareTo(id1);
                        }else{
                            return time2.compareTo(time1);
                        }
                    }
                });
            }
            return nameList;
        } catch (Exception e) {
            log.error("【读取日志文件】异常",e);
        }
        return null;
    }

    public void getFileName(String path,ArrayList<String> listFileName){
        File file =new File(path);
        File[] files=file.listFiles();
        String[] names= file.list();
        if(names!=null || names.length>0){
            //log.info("【读取日志文件】文件数量="+names.length);
            String[] completName= new String[names.length];
            for(int i=0;i<names.length;i++){
                completName[i]=path+names[i];
            }
            listFileName.addAll(Arrays.asList(completName));
        }
        if(files!=null || files.length>0) {
            //log.info("【读取日志文件】文件夹数量="+files.length);
            for (File a : files) {
                if (a.isDirectory()) {                //判断有子文件
                    //log.info("【读取日志文件】子文件夹路径="+a.getAbsolutePath());
                    getFileName(a.getAbsolutePath() + "/", listFileName);
                }
            }
        }
    }
}


HTML页面代码:

<html>
<head>
	<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
	<meta http-equiv="UserContent-Type" content="text/html; charset=utf-8" />
	<title>查看日志</title>
    <script src="/js/jquery-2.0.2.min.js"></script>
</head>
<body>
<h4><a href="javascript:void(0);" onclick="getBack();" target="_self">..</a></h4>
</body>
</html>
<script>
//默认参数的路径参数
var domain = "http://127.0.0.1:8082";
var path = "D:/cmw/test/";
getFloader();

function getFloader(){
	//返回配置的路径参数
    getBasic();
	var pathFloder = "";
	var locationHref = location.href;
	if(locationHref.indexOf("pathFloder=")!=-1){
		pathFloder = locationHref.substring(locationHref.indexOf("pathFloder=")+11,locationHref.length);
	}else if(locationHref.indexOf("pathFloder=")==-1 && locationHref.indexOf("pathFloder")!=-1){
        pathFloder = locationHref.substring(locationHref.indexOf("pathFloder")+10,locationHref.length);
    }
	$.ajax({
		type: "GET",
		url: '/logger/getLogFloder',
		data: {
			path:path,
			pathFloder:pathFloder
		},
        async:false,
		success: function (backData) {
			if(backData.code=="3"){
				var html = '';
				for(var i=0;i<backData.data.length;i++){
					var url = backData.data[i].replace(path,"/");
					if(url.indexOf(".log")!=-1){
						html+='<h4><a href="'+domain+url+'" target="_blank">'+url+'</h4>';
					}else{
						html+='<h4><a href="'+domain+'/views/admin/queryLogFile.html?pathFloder='+pathFloder+'/'+url+'" target="_self">'+url+'</h4>';
					}
				}
				$("body").append(html);
			}else{
				alert(backData.msg);
			}
		},
		error: function () {
			alert("error request");
		}
	});
}
/**
*返回配置的路径参数
**/
function getBasic(){
    $.ajax({
        type: "GET",
        url: '/logger/getBasic',
        data: {},
        async:false,
        success: function (backData) {
            if(backData.code=="3"){
                domain = backData.domain;
                path = backData.path;
            }else{
                alert(backData.msg);
            }
        },
        error: function () {
            alert("error request");
        }
    });
}
//返回上一级
function getBack(){
    var pathFloder = "";
    var locationHref = location.href;
    if(locationHref.indexOf("pathFloder=")!=-1){
        pathFloder = locationHref.substring(locationHref.indexOf("pathFloder=")+11,locationHref.length);
    }else if(locationHref.indexOf("pathFloder=")==-1 && locationHref.indexOf("pathFloder")!=-1){
        pathFloder = locationHref.substring(locationHref.indexOf("pathFloder")+10,locationHref.length);
    }
    if(pathFloder!="" && pathFloder.indexOf("/")!=-1){
        locationHref = locationHref.substring(0,locationHref.lastIndexOf("/"));
    }
    location.href=locationHref;
}
</script>
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值