2013年2月10日日曜日

apacheのcombinedログのパース処理

こんな感じか?
#!/usr/bin/env ruby
# coding: utf-8
class ApacheEntry
attr_reader :raw, :ip_address, :server_address, :user,
:date, :request, :status, :size, :referer, :user_agent
attr_accessor :remote_host
def initialize(line)
@raw = line
line =~
/
^(\S+) #ip_address
\s
(\S+) #server_address
\s
(\S+) #user
\s
\[ (.*?) \] #date
\s+
" (.*?) " #request
\s+
(\S+) #status
\s+
(\S+) #size
\s+
" (.*?) " #referer
\s+
" (.*?) " #user_agent
/x
@ip_address = $1
@server_address = $2
@user = $3
d = $4
@request = URI.unescape($5)
@status = $6
@size = $7
@referer = $8
@user_agent = $9
d=d.sub(/\:/," ")
@date = Time.parse(d).strftime("%Y/%m/%d %H:%m")
@remote_host = @ip_address
end
end


やっぱり面倒だからLTSVにするか

0 件のコメント: