0
点赞
收藏
分享

微信扫一扫

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


背景

   系统的对接,将接口部署到第三方的企业,有的时候需要看系统的日志信息,每次都要登录服务器上操作太麻烦,如何实现在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这个文件夹下面所有的文件名称

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

日志文件打开展示:

  <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> 当前查看日志:<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 出现乱码

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

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

希望对你有所帮助

 

举报

相关推荐

0 条评论