Changes between Version 7 and Version 8 of LogParser
- Timestamp:
- Jul 4, 2008, 5:32:39 PM (17 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
LogParser
v7 v8 14 14 {{{ 15 15 ex: ::1 - - [29/Jun/2008:07:35:15 +0800] "GET / HTTP/1.0" 200 729 "... 16 16 17 }}} 17 18 = 結果 = … … 66 67 67 68 = LogParser.java = 69 這個java檔的任務是分析log檔案中的每行資訊 70 68 71 {{{ 69 72 private static Pattern p = Pattern … … 71 74 " ([^ ]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\".*"); 72 75 }}} 73 76 首先先宣告產生一個物件 [http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html java.util.regex.Pattern] 77 這個類別沒有建構子,因此宣告出來之後用compile(String regex)敘述來建立滿足正規表示式的物件,功能說明:[[br]] 78 Compiles the given regular expression into a pattern.[[br]] 79 將正規表示式的字串當引數輸入之後,就可以得到一個p的Pattern物件,而此正規表示式:[[br]] 80 '''([^ ]*) ([^ ]*) ([^ ]*) \\[([^]]*)\\] \"([^\"]*)\" ([^ ]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\".*''' [[br]] 81 對應到的apache log格式為:[[br]] 82 '''217.160.136.128 - - [30/Jun/2008:20:50:04 +0800] "GET /calendar/tools/send_reminders.php?noSet=0&includedir=http://64.15.76.197/modules/1.gif?/ HTTP/1.1" 404 332 "-" "Morfeus Scanner"'''[[br]] 83 在此可以把Pattern 當成是一個雛型類別,用compiler(表示式) 則告知了 以"表示式"為規則產生一個p的模板出來 84 ---------------------------- 74 85 {{{ 75 86 public LogParser(String line) throws ParseException, Exception{ … … 93 104 } 94 105 }}} 106 接著定義建構子,宣告了一個 [http://java.sun.com/javase/6/docs/api/java/util/regex/Matcher.html java.util.regex.Matcher] 此物件可以用來與之前的 Pattern搭配。[[br]] 剛剛宣告的模板p有個函數 matcher(String) ,此功能會將材料(String敘述 )壓印成模板的形狀,並把這個壓出物件叫做matcher。 之後要取用matcher的第n段,只要用matcher.group(n)就可以把第n段的內容以String的形式取回。[[br]] 107 回頭對照傳近來的內容 108 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 109 || 217.160.136.128 || - || - || [30/Jun/2008:20:50:04 +0800] || "GET /calendar/tools/send_reminders.php?noSet=0&includedir=http://64.15.76.197/modules/1.gif?/ HTTP/1.1" 404 332 " || - || " "Morfeus Scanner" || 110 111 [[br]] 95 112 96 113 {{{ 97 114 public static boolean isIpAddress(String inputString) { 98 99 115 StringTokenizer tokenizer = new StringTokenizer(inputString, "."); 100 101 116 if (tokenizer.countTokens() != 4) { 102 103 117 return false; 104 105 118 } 106 }}}107 {{{108 119 try { 109 110 120 for (int i = 0; i < 4; i++) { 111 112 121 String t = tokenizer.nextToken(); 113 114 122 int chunk = Integer.parseInt(t); 115 116 123 if ((chunk & 255) != chunk) { 117 118 124 return false; 119 120 125 } 121 122 126 } 123 124 127 } catch (NumberFormatException e) { 125 126 128 return false; 127 128 129 } 129 130 130 if (inputString.indexOf("..") >= 0) { 131 132 131 return false; 133 134 132 } 135 136 133 return true; 137 138 134 } 139 140 public String getIp() {141 142 return ip;143 144 }145 146 public String getProtocol() {147 148 return protocol;149 150 }151 152 public String getMethod() {153 154 return method;155 156 }157 158 public String getUrl() {159 160 return url;161 162 }163 164 public String getCode() {165 166 return code;167 168 }169 170 public String getByteSize() {171 172 return byteSize;173 174 }175 176 public String getReferrer() {177 178 return referrer;179 180 }181 182 public String getAgent() {183 184 return agent;185 186 }187 188 public long getTimestamp() {189 190 return timestamp;191 192 }193 194 135 } 195 136 }}}