【发布时间】:2016-03-07 14:50:17
【问题描述】:
我有一个rails服务器日志文件,格式如下。
Started <REQUEST_TYPE_1> <URL_1> for <IP_1> at <TIMESTAMP_1>
Processing by <controller#action_1> as <REQUEST_FORMAT_1>
Parameters: <parameters_1>
<Some logs from code>
Rendered <some_template_1> (<timetaken_1>)
Completed <RESPONSE_CODE_1> in <TIME_1>
Started <REQUEST_REQUEST_TYPE_2> <URL_2> for <IP_2> at <TIMESTAMP_2>
Processing by <controller#action_2> as <REQUEST_FORMAT_2>
Parameters: <parameters_2>
<Some logs from code>
Completed <RESPONSE_CODE_2> in <TIME_2>
现在,我需要解析这个日志并从上面的日志中提取所有REQUEST_TYPE、URL、IP、TIMESTAMP、REQUEST_FORMAT、RESPONSE_CODE。我正在努力在 java/ruby 中为它创建一个好的正则表达式。 <> 在实际输入中不存在。我已经添加了实际数据的可读性和屏蔽。
示例请求:
Started GET "/google.com/2" for 127.0.0.1 at Tue Dec 01 12:01:13 +0530 2015
Processing by MyController#method as JS
Parameters: {"abc" => "xyz"}
[LOG] 3 : User text log
Completed 200 OK in 26ms (Views: 3.3ms | ActiveRecord: 2.9ms)
Started POST "/google.com/543" for 127.0.1.1 at Tue Dec 01 13:13:16 +0530 2015
Processing by MyController#method_2 as JSON
Parameters: {"efg" => "uvw"}
Completed 404 Not Authorized in 65ms (Views: 1.5ms | ActiveRecord: 1.0ms)
预期输出:
request_types = ['GET', 'POST']
urls = ['/google.com/2','/google.com/543']
ips = ['127.0.0.1','127.0.1.1']
timestamps = ['Tue Dec 01 12:01:13 +0530 2015','Tue Dec 01 13:13:16 +0530 2015']
request_formats = ['JS','JSON']
response_codes = ['200 OK','404 Not Authorized']
我能够编写以下正则表达式,但它没有按预期工作。
request_types = /Started \w+/ //Expected array of all request types
urls = /"\/.*\/"/ //Expected array of all urls types
ips = /"d{1,3}.d{1,3}.d{1,3}.d{1,3}"/ //Expected array of all ips types
timestamps = /at \w+/
request_formats =/as \w+/
response_codes = /Completed \w+/
我希望在创建正则表达式以从 JAVA/RUBY 中的给定输入中提取此参数时获得一些帮助。如果可能的话,我更喜欢 java。
【问题讨论】:
-
您的原始日志文件是否也有这些括号(
<>)? -
不。只是为了掩盖实际数据
-
是的,但是
parameters、some log的行不必总是存在。另外,我将如何在 JAVA/ruby 中使用它? -
@Jan 添加了带有掩码数据和预期输出的示例输入。
标签: java ruby-on-rails regex