web在线阅读日志文件,response.getOutputStream().write中文乱码原因

这篇博客介绍了如何在Web页面上实时显示日志文件内容,通过Java后端获取日志文件列表并返回给前端展示。首先,通过`file.list()`获取文件夹中的所有日志文件名,然后在前端使用Iframe加载日志内容。虽然实时更新尚未实现,但已能展示完整日志文件,对于日常系统监控提供了便利。
摘要由CSDN通过智能技术生成

背景

   系统的对接,将接口部署到第三方的企业,有的时候需要看系统的日志信息,每次都要登录服务器上操作太麻烦,如何实现在web页面对日志的观察,将日志文件显示到web页面上,可能实时的显示目前还没做好,但是将整个日志文件显示到页面上也是非常的有必要的

实现

   显示所有的文件,获取到所有的日志文件信息

	@ResponseBody
	@RequestMapping("getLogList")
	public JSONObject getLogList(HttpServletRequest request) {

		logger.info("**************开启读取日志信息*****************");

		String logtype = request.getParameter("logtype");

		logger.info("*************日志查看类型{}*****************", logtype);

		JSONObject jsonRtn = new JSONObject();
		String path = "";
		if ("catalina".equals(logtype)) {
			path = XMLUtils.getValueByName("catalinalog");
		} else if ("localhost".equals(logtype)) {
			path = XMLUtils.getValueByName("localhostlog");
		} else {
			path = XMLUtils.getValueByName("commonslog");
		}

		logger.info("******日志路径为:{}*******", path);

		File file = new File(path);
		if (!file.exists()) {
			logger.info("**************读取失败,日志文件不存在*****************");
			jsonRtn.put("code", "9999");
			jsonRtn.put("msg", "读取失败,日志文件不存在");
			return jsonRtn;
		}
		if (!file.isDirectory()) {
			logger.info("**************读取失败,目标文件夹没有配置*****************");
			jsonRtn.put("code", "9999");
			jsonRtn.put("msg", "读取失败,目标文件夹没有配置");
			return jsonRtn;
		}

		List<Map<String, String>> list = new ArrayList<Map<String, String>>();
		String[] fileName = file.list();
		for (String fn : fileName) {
			Map<String, String> map = new HashMap<String, String>();
			map.put("filename", fn);
			map.put("logtype", logtype);
			list.add(map);
		}
		jsonRtn.put("filelist", list);
		jsonRtn.put("code", "0000");
		return jsonRtn;
	}

从中可以可以学到的是file.list 返回的是字符串数组,标识的是file这个文件夹下面所有的文件名称

日志文件打开展示:

	<script>
	    function getUrlParam(name) {
		  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
		  var url = decodeURI(window.location.search);
		  var r = url.substr(1).match(reg);
		  if (r != null)
			  return (r[2]);
		   return '';
	    }
		window.onload = function() {
            var logtype=getUrlParam("logtype");
            var filename=getUrlParam("filename");
			$("#iframe1").attr("src","LogLoad.do?logtype="+logtype+"&filename="+filename);
			$("#logname").html(filename);
			$("#goback").attr("href","LogController.do?logtype="+logtype);
			
		}
	</script>
	<p><a id="goback">返回</a>&nbsp;当前查看日志:<span id="logname"></span></p>
	<div class="box1">
	      <iframe id="iframe1" src="#" style="width:98%;height:100%;"></iframe>
	</div>

Iframe 的src地址为日志接口地址

	/**
	 * 日志情况
	 * @throws IOException 
	 */
	@ResponseBody
	@RequestMapping("LogLoad.do")
	public void downloadfile(String filename, String logtype, HttpServletResponse response) throws IOException {
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/plain;charset=GBK");
		logger.info("*************日志下载信息{}*****************", logtype);
		String path = "";
		if ("catalina".equals(logtype)) {
			path = XMLUtils.getValueByName("catalinalog");
		} else if ("localhost".equals(logtype)) {
			path = XMLUtils.getValueByName("localhostlog");
		} else {
			path = XMLUtils.getValueByName("commonslog");
		}
		logger.info("******下载日志路径为:{}*******", path + "//" + filename);

		File file = new File(path + "//" + filename);
		FileInputStream input = new FileInputStream(file);
		byte[] data = new byte[input.available()];
		input.read(data);
		response.getOutputStream().write(new String(data,"utf-8").getBytes("GBK"));
		input.close();
	}
}

最为关键的是getByte("GBK") 我用UTF-8 出现乱码

 上面就是最终实现的结果,

希望对你有所帮助

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值