Hi all,
When I run the script I got this error message.
undefined method `[]' for nil:NilClass (NoMethodError)
from chandra.rb:11:in `collect'
from chandra.rb:11
# --------------8<---------------------------------8<---------------
> require 'rubygems'
> require 'apachelogregex'
> require 'pp'
>
> format = '%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"'
> parser = ApacheLogRegex.new(format)
> access_log = Hash.new
> # Creating a hash of an array of hashes!
> # Can be simplified based on your actual requirement.
>
> File.readlines('aleurier_access.log').collect do |line|
>
record = parser.parse(line)
> # The code below does the actual job. Can be a one-liner
> # if you know ternary operators or maybe if expression.
> if access_log.key? record["%h"]
> access_log[record["%h"]] << record
> else
> access_log[record["%h"]] = Array.new
> end
> end
>
> # Now let's test some!
> puts access_log.keys
> while true
> print "Enter ip address: "
> ipaddr = gets.chomp
> puts "-" * 40
> pp access_log[ipaddr]
> puts "-" * 40
> end
> # --------------8<---------------------------------8<---------------
>
> Is this what you wanted ?
>
yes exactly this is what I want to do.
I tried this way it runs fine
require 'rubygems'
require 'apachelogregex'
require 'set'
require 'pp'
urls = Set.new
format = '%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}\"'
parser = ApacheLogRegex.new(format)
File.readlines('aleurier_access.log').collect do |line|
l = parser.parse(line)
urls.add(l["%r"])
# {"%r"=>"GET /blog/index.xml HTTP/1.1", "%h"=>"87.18.183.252", ... }
end
puts urls.to_a.sort
pp l
but I still get an error.
undefined local variable or method `l' for main:Object (NameError)
I tried using @l but no use
Thanks alot
--
Cheers,
Ranjith Kumar.K,
Software Engineer,
Sedin Technologies,
http://ranjithtenz.wordpress.com/
http://victusads.com/
_______________________________________________
ILUGC Mailing List:
http://www.ae.iitm.ac.in/mailman/listinfo/ilugc