def parse( line )
_, remote_addr, status, request, size, referrer, http_user_agent, http_x_forwarded_for = /^([^\\s]+) - (\\d+) \\\"(.+)\\\" (\\d+) \\\"(.*)\\\" \\
To write to a file:
File.open("file.txt", "w") do |file|
file.puts "whatever"
end
As I write in a comment above - you didn't say what is nil. Also, check whether referrer
contains what you think it contains. EDIT I see it's request that is nil
. Obviously, regexp trouble.
Use rubular.com to easily test your regexp. Copy a line from your input file into "Your test string", and your regexp into "Your regular expression", and tweak until you get a highlight in "Match result".
Also, what are "wrong logging strings"? If we're talking Apache, log format is configurable.
You seem to have a few questions here, so I'll take a stab at what seems to be the main one:
If you want to see if something is nil, just use .nil?
- so in your example, you can just say request.nil?
, which returns true
if it is nil
and false
otherwise.
Ruby 2.3.0 added a safe navigation operator (&.
) that checks for nil
before calling a method.
request&.split(' ')
This is more or less semantically equivalent to
!request.nil? && request.split(' ')