栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从日志文件中提取Java堆栈跟踪的工具

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从日志文件中提取Java堆栈跟踪的工具

我想出了以下Groovy脚本。当然,它已经非常适应我的需求,但是我希望它能对某人有所帮助。

def traceMap = [:]// Number of lines to keep in bufferdef BUFFER_SIZE = 100// Pattern for stack trace linedef TRACE_LINE_PATTERN = '^[\s\t]+at .*$'// Log line pattern between which we try to capture full tracedef LOG_LINE_PATTERN = '^([<#][^/]|\d\d).*$'// List of patterns to replace in final captured stack trace line // (e.g. replace date and transaction information that may make similar traces to look as different)def REPLACE_PATTERNS = [  '^\d+-\d+\@.*?tksId: [^\]]+\]',  '^<\w+ \d+, \d+ [^>]*?> <[^>]*?> <[^>]*?> <[^>]*?> <',  '^####<[^>]+?> <[^>]*?> <[^>]*?> <[^>]*?> <[^>]*?> <[^>]*?> <[^>]*?> <[^>]*?> <[^>]*?> <[^>]*?> <[^>]*?> <',  '<([\w:]+)?TransaktionsID>[^<]+?</([\w:]+)?TransaktionsID>',  '<([\w:]+)?TransaktionsTid>[^<]+?</([\w:]+)?TransaktionsTid>']new File('.').eachFile { File file ->  if (file.name.contains('.log') || file.name.contains('.out')) {    def bufferLines = []    file.withReader { Reader reader ->      while (reader.ready()) {   def String line = reader.readLine()        if (line.matches(TRACE_LINE_PATTERN)) {          def trace = []          for(def i = bufferLines.size() - 1; i >= 0; i--) { if (!bufferLines[i].matches(LOG_LINE_PATTERN)) {   trace.add(0, bufferLines[i]) } else {   trace.add(0, bufferLines[i])   break }          }          trace.add(line)          if (reader.ready()) { line = reader.readLine() while (!line.matches(LOG_LINE_PATTERN)) {   trace.add(line)   if (reader.ready()) {     line = reader.readLine()   } else {     break;   } }          }          def traceString = trace.join("n")          REPLACE_PATTERNS.each { pattern -> traceString = traceString.replaceAll(pattern, '')          }          if (traceMap.containsKey(traceString)) { traceMap.put(traceString, traceMap.get(traceString) + 1)          } else { traceMap.put(traceString, 1)          }        }        // Keep the buffer of last lines.        bufferLines.add(line)        if (bufferLines.size() > BUFFER_SIZE) {          bufferLines.remove(0)        }      }    }  }}traceMap = traceMap.sort { it.value }traceMap.reverseEach { trace, number ->  println "-- Occured $number times -----------------------------------------"  println trace}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573907.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号