按行输出log日志文件里的日志,
2016-05-13 10:06
204 查看
如果用不同的bufferedreader的readline方法去读取一个日志文件里的一行的话,经常会出现,实际读出来的并不是真是的行,而是会把行阶段,用下面的方式,可以把一个文件里的行日志,按行输出:
@GET @Path("viewlog") @Produces("text/plain;charset=UTF-8") public String viewLog(@QueryParam("s") Integer s,@QueryParam("k") String k) { String logpath = ConfigHelp.getProperty("logpath"); StringBuffer sb = new StringBuffer(); try { RandomAccessFile rf = null; rf = new RandomAccessFile(logpath, "r"); long len = rf.length(); long start = rf.getFilePointer(); long nextend = start + len - 1; String line; rf.seek(nextend); int c = -1; int size = 0; while (nextend > start && size < ((null == s) ? 30 : s)) { c = rf.read(); if (c == '\n' || c == '\r') { line = rf.readLine(); if (line != null) { String str = new String(line.getBytes("ISO-8859-1"), "utf-8"); if(StringUtils.isEmpty(k) || (StringUtils.isNotEmpty(k) && str.contains(k))){ sb.append(str).append("\r\n").append("\r\n"); size++; } } nextend--; } nextend--; rf.seek(nextend); if (nextend == 0) {// 当文件指针退至文件开始处,输出第一行 String str = new String(rf.readLine().getBytes("ISO-8859-1"), "utf-8"); if(StringUtils.isEmpty(k) || (StringUtils.isNotEmpty(k) && str.contains(k))){ sb.append(str); size++; } } } rf.close(); } catch (Exception e) { e.printStackTrace(); } return sb.toString(); }
相关文章推荐
- d3.js——文本换行
- 无证书真机调试出现Unable to add App ID because the '10' App ID limit in '7' days has been exceeded.
- 非对称加密算法
- 2016.05.12回顾
- xcode编译代码的时候 ld: library not found for -xxx 解决方法
- Css span div
- Ajax Array Json 示例
- 小学生算术
- Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持-伍华聪
- 针对苹果最新审核要求为应用兼容IPv6
- android数据库Sqlite(3)
- 334. Increasing Triplet Subsequence(C++实现)
- cocoapod的报错处理:The dependency `xxx` is not used in any concrete target.
- ListView实现item的卡片效果(不使用RecyclerView+CardView)
- 只言片语
- SpringMVC+Spring4+Mybatis3+Log4j集成
- Android 四种异步操作UI界面的方法
- plugin scala is incompatible with current installation
- push到github时,每次都要输入用户名和密码的问题
- SimpleDateFormat使用详解