骨のダイスを転がそう
2009-06-11
class CombinedLog require 'strscan' require 'uri' attr_accessor :host,:ident,:user,:datetime,:method,:target,:protocol,:statuscode,:size,:referer,:useragent def initialize(line) s = StringScanner.new(line) # ホスト名 @host = s.scan(/[^\s]+/) s.scan(/\s+/) @ident = s.scan(/\S+/) s.scan(/\s+/) # ユーザー名 @user = s.scan(/\S+/) s.scan(/\s+/) # 時間 @datetime = s.scan(/\[.*?\]/) s.scan(/\s+"/) # メソッド @method = s.scan(/\S+/) s.scan(/\s+/) # ファイル名 @target = to_uri =s.scan(/\S+/) s.scan(/\s+/) # プロトコル @protocol = s.scan(/[^"\s]+/) s.scan(/"\s+/) # ステータスコード @statuscode = s.scan(/\S+/) s.scan(/\s+/) # サイズ @size = s.scan(/\S+/) s.scan(/\s+"/) # リファラ _referer = s.scan(/[^"\s]+/) s.scan(/"\s/) @referer = URI.parse(_referer) # ユーザーエージェント @useragent = s.scan(/".*"/) end end