簡體   English   中英

不同tomcat日志條目的正則表達式模式

[英]A regex pattern for different tomcat's log entries

我是正則表達式的新手。

如果我從 tomcat 的訪問日志文件中有以下行:

123.45.67.89 - - [27/Oct/2000:09:27:09 -0400] \"GET /java/javaResources.html HTTP/1.0\" 200 10450 \"-\" \"Mozilla/4.6 [en] ( X11;U;OpenBSD 2.8 i386;導航)\""

以下模式適用於看起來與上面完全相同的條目:

"^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+) \"([^\"]+)\" \"([^\"]+)\""

但並非所有日志條目看起來都與上面的完全一樣,有時它包含 9 個字段,有時包含 7 個字段。9 個字段的示例:

82.132.139.79 - - [14/Jul/2011:18:52:44 +0100]“GET /~roger/cpp/introans.htm HTTP/1.1”200 11195“http://www.dcs.bbk.ac。 uk/~roger/cpp/intro3.htm" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile /8C148 Safari/6533.18.5"

但是,我只對 IP、日期和時間以及 URL 感興趣。 是否存在僅從日志條目中搜索匹配條目而不考慮其字段編號的模式?

您在示例中給出的行是偽標准組合日志格式 這 9 個字段格式擴展了廣泛使用的常見日志格式,增加了兩個字段:referrer 和 user-agent。

通過在您的正則表達式中使最后兩個字段可選,您可以匹配通用或組合格式的行:

"^(\\S+) (\\S+) (\\S+) \\[(.*?)\\] \"(.*?)\" (\\S+) (\\S+)( \"(.*?)\" \"(.*?)\")?"

捕獲組是:

  1. 遠程主機
  2. RFC 1413 身份
  3. 用戶身份
  4. 約會時間
  5. 要求
  6. 地位
  7. 字節
  8. 可選組合字段
  9. 推薦人
  10. 用戶代理

此模式特意不特定於日志消息中特定字段的內容。 通常,在解析日志時,您希望盡可能提取任何內容,而不是嘗試驗證規范。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM