about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/mongrel.rb32
-rw-r--r--lib/mongrel/command.rb12
-rw-r--r--lib/mongrel/configurator.rb30
-rw-r--r--lib/mongrel/debug.rb2
-rw-r--r--lib/mongrel/logger.rb17
-rw-r--r--lib/mongrel/rails.rb8
6 files changed, 52 insertions, 49 deletions
diff --git a/lib/mongrel.rb b/lib/mongrel.rb
index af558e7..bef1460 100644
--- a/lib/mongrel.rb
+++ b/lib/mongrel.rb
@@ -1,3 +1,4 @@
+# Ruby
 require 'socket'
 require 'tempfile'
 require 'yaml'
@@ -6,10 +7,15 @@ require 'etc'
 require 'uri'
 require 'stringio'
 
+# Ensure working require
 require 'mongrel/gems'
 
+# TODO: Only require these for RUBY_VERSION <= 1.8.6
+#       and only for platforms that require it, exclusive matching
+if !RUBY_PLATFORM.match(/java|mswin/) && !RUBY_VERSION.match(/1\.8\.\d/)
 Mongrel::Gems.require 'cgi_multipart_eof_fix'
 Mongrel::Gems.require 'fastthread'
+end
 require 'thread'
 
 require 'http11'
@@ -183,23 +189,23 @@ module Mongrel
       rescue EOFError,Errno::ECONNRESET,Errno::EPIPE,Errno::EINVAL,Errno::EBADF
         client.close rescue nil
       rescue HttpParserError => e
-        log(:error, "#{Time.now.httpdate}: HTTP parse error, malformed request (#{params[Const::HTTP_X_FORWARDED_FOR] || client.peeraddr.last}): #{e.inspect}")
-        log(:error, "#{Time.now.httpdate}: REQUEST DATA: #{data.inspect}\n---\nPARAMS: #{params.inspect}\n---\n")
+        Mongrel.log(:error, "#{Time.now.httpdate}: HTTP parse error, malformed request (#{params[Const::HTTP_X_FORWARDED_FOR] || client.peeraddr.last}): #{e.inspect}")
+        Mongrel.log(:error, "#{Time.now.httpdate}: REQUEST DATA: #{data.inspect}\n---\nPARAMS: #{params.inspect}\n---\n")
         # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4
         client.write(Const::ERROR_400_RESPONSE)
       rescue Errno::EMFILE
         reap_dead_workers('too many files')
       rescue Object => e
-        log(:error, "#{Time.now.httpdate}: Read error: #{e.inspect}")
-        log(:error, e.backtrace.join("\n"))
+        Mongrel.log(:error, "#{Time.now.httpdate}: Read error: #{e.inspect}")
+        Mongrel.log(:error, e.backtrace.join("\n"))
       ensure
         begin
           client.close
         rescue IOError
           # Already closed
         rescue Object => e
-          log(:error, "#{Time.now.httpdate}: Client error: #{e.inspect}")
-          log(:error, e.backtrace.join("\n"))
+          Mongrel.log(:error, "#{Time.now.httpdate}: Client error: #{e.inspect}")
+          Mongrel.log(:error, e.backtrace.join("\n"))
         end
         request.body.delete if request and request.body.class == Tempfile
       end
@@ -211,14 +217,14 @@ module Mongrel
     # after the reap is done.  It only runs if there are workers to reap.
     def reap_dead_workers(reason='unknown')
       if @workers.list.length > 0
-        log(:error, "#{Time.now.httpdate}: Reaping #{@workers.list.length} threads for slow workers because of '#{reason}'")
+        Mongrel.log(:error, "#{Time.now.httpdate}: Reaping #{@workers.list.length} threads for slow workers because of '#{reason}'")
         error_msg = "#{Time.now.httpdate}: Mongrel timed out this thread: #{reason}"
         mark = Time.now
         @workers.list.each do |worker|
           worker[:started_on] = Time.now if not worker[:started_on]
 
           if mark - worker[:started_on] > @timeout + @throttle
-            log(:error, "#{Time.now.httpdate}: Thread #{worker.inspect} is too old, killing.")
+            Mongrel.log(:error, "#{Time.now.httpdate}: Thread #{worker.inspect} is too old, killing.")
             worker.raise(TimeoutError.new(error_msg))
           end
         end
@@ -233,7 +239,7 @@ module Mongrel
     # that much longer.
     def graceful_shutdown
       while reap_dead_workers("shutdown") > 0
-        log(:error, "#{Time.now.httpdate}: Waiting for #{@workers.list.length} requests to finish, could take #{@timeout + @throttle} seconds.")
+        Mongrel.log(:error, "#{Time.now.httpdate}: Waiting for #{@workers.list.length} requests to finish, could take #{@timeout + @throttle} seconds.")
         sleep @timeout / 10
       end
     end
@@ -279,7 +285,7 @@ module Mongrel
               worker_list = @workers.list
   
               if worker_list.length >= @num_processors
-                log(:error, "#{Time.now.httpdate}: Server overloaded with #{worker_list.length} processors (#@num_processors max). Dropping connection.")
+                Mongrel.log(:error, "#{Time.now.httpdate}: Server overloaded with #{worker_list.length} processors (#@num_processors max). Dropping connection.")
                 client.close rescue nil
                 reap_dead_workers("max processors")
               else
@@ -298,14 +304,14 @@ module Mongrel
               # client closed the socket even before accept
               client.close rescue nil
             rescue Object => e
-              log(:error, "#{Time.now.httpdate}: Unhandled listen loop exception #{e.inspect}.")
-              log(:error, e.backtrace.join("\n"))
+              Mongrel.log(:error, "#{Time.now.httpdate}: Unhandled listen loop exception #{e.inspect}.")
+              Mongrel.log(:error, e.backtrace.join("\n"))
             end
           end
           graceful_shutdown
         ensure
           @socket.close
-          # log(:error, "#{Time.now.httpdate}: Closed socket.")
+          # Mongrel.log(:error, "#{Time.now.httpdate}: Closed socket.")
         end
       end
 
diff --git a/lib/mongrel/command.rb b/lib/mongrel/command.rb
index a3ee57d..d99208e 100644
--- a/lib/mongrel/command.rb
+++ b/lib/mongrel/command.rb
@@ -55,14 +55,14 @@ module Mongrel
         # I need to add my own -h definition to prevent the -h by default from exiting.
         @opt.on_tail("-h", "--help", "Show this message") do
           @done_validating = true
-          puts @opt
+          Mongrel.log(:info, @opt)
         end
 
         # I need to add my own -v definition to prevent the -v from exiting by default as well.
         @opt.on_tail("--version", "Show version") do
           @done_validating = true
           if VERSION
-            puts "Version #{Mongrel::Const::MONGREL_VERSION}"
+            Mongrel.log(:info, "Version #{Mongrel::Const::MONGREL_VERSION}")
           end
         end
 
@@ -155,17 +155,17 @@ module Mongrel
 
       # Prints a list of available commands.
       def print_command_list
-        puts "#{Mongrel::Command::BANNER}\nAvailable commands are:\n\n"
+        Mongrel.log(:info, "#{Mongrel::Command::BANNER}\nAvailable commands are:\n\n")
 
         self.commands.each do |name|
           if /mongrel::/ =~ name
             name = name[9 .. -1]
           end
 
-          puts " - #{name[1 .. -1]}\n"
+          Mongrel.log(:info, " - #{name[1 .. -1]}\n")
         end
 
-        puts "\nEach command takes -h as an option to get help."
+        Mongrel.log(:info, "\nEach command takes -h as an option to get help.")
 
       end
 
@@ -180,7 +180,7 @@ module Mongrel
           print_command_list
           return true
         elsif cmd_name == "--version"
-          puts "Mongrel Web Server #{Mongrel::Const::MONGREL_VERSION}"
+          Mongrel.log(:info, "Mongrel Web Server #{Mongrel::Const::MONGREL_VERSION}")
           return true
         end
 
diff --git a/lib/mongrel/configurator.rb b/lib/mongrel/configurator.rb
index 0bb3c62..0d5aa37 100644
--- a/lib/mongrel/configurator.rb
+++ b/lib/mongrel/configurator.rb
@@ -59,18 +59,18 @@ module Mongrel
         target_gid = Etc.getgrnam(group).gid if group
 
         if uid != target_uid or gid != target_gid
-          log(:info, "Initiating groups for #{user.inspect}:#{group.inspect}.")
+          Mongrel.log(:info, "Initiating groups for #{user.inspect}:#{group.inspect}.")
           Process.initgroups(user, target_gid)
         
-          log(:info, "Changing group to #{group.inspect}.")
+          Mongrel.log(:info, "Changing group to #{group.inspect}.")
           Process::GID.change_privilege(target_gid)
 
-          log(:info, "Changing user to #{user.inspect}." )
+          Mongrel.log(:info, "Changing user to #{user.inspect}." )
           Process::UID.change_privilege(target_uid)
         end
       rescue Errno::EPERM => e
-        log(:critical, "Couldn't change user and group to #{user.inspect}:#{group.inspect}: #{e.to_s}.")
-        log(:critical, "Mongrel failed to start.")
+        Mongrel.log(:critical, "Couldn't change user and group to #{user.inspect}:#{group.inspect}: #{e.to_s}.")
+        Mongrel.log(:critical, "Mongrel failed to start.")
         exit 1
       end
     end
@@ -82,7 +82,7 @@ module Mongrel
     # Writes the PID file if we're not on Windows.
     def write_pid_file
       unless RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/
-        log(:info, "Writing PID file to #{@pid_file}")
+        Mongrel.log(:info, "Writing PID file to #{@pid_file}")
         open(@pid_file,"w") {|f| f.write(Process.pid) }
         open(@pid_file,"w") do |f|
           f.write(Process.pid)
@@ -192,7 +192,7 @@ module Mongrel
         if logfile[0].chr != "/"
           logfile = File.join(ops[:cwd],logfile)
           if not File.exist?(File.dirname(logfile))
-            log(:critical, "!!! Log file directory not found at full path #{File.dirname(logfile)}.  Update your configuration to use a full path.")
+            Mongrel.log(:critical, "!!! Log file directory not found at full path #{File.dirname(logfile)}.  Update your configuration to use a full path.")
             exit 1
           end
         end
@@ -203,7 +203,7 @@ module Mongrel
         Dir.chdir(ops[:cwd])
 
       else
-        log(:warning, "WARNING: Win32 does not support daemon mode.")
+        Mongrel.log(:warning, "WARNING: Win32 does not support daemon mode.")
       end
     end
 
@@ -249,7 +249,7 @@ module Mongrel
       mime = load_yaml(file, mime)
 
       # check all the mime types to make sure they are the right format
-      mime.each {|k,v| log(:warning, "WARNING: MIME type #{k} must start with '.'") if k.index(".") != 0 }
+      mime.each {|k,v| Mongrel.log(:warning, "WARNING: MIME type #{k} must start with '.'") if k.index(".") != 0 }
 
       return mime
     end
@@ -361,22 +361,22 @@ module Mongrel
       ops = resolve_defaults(options)
 
       # forced shutdown, even if previously restarted (actually just like TERM but for CTRL-C)
-      trap("INT") { log(:notice, "INT signal received."); stop(false) }
+      trap("INT") { Mongrel.log(:notice, "INT signal received."); stop(false) }
 
       # always clean up the pid file
       at_exit { remove_pid_file }
 
       unless RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/
         # graceful shutdown
-        trap("TERM") { log(:notice, "TERM signal received."); stop }
+        trap("TERM") { Mongrel.log(:notice, "TERM signal received."); stop }
         # debug mode
-        trap("USR1") { log(:notice, "USR1 received, toggling $mongrel_debug_client to #{!$mongrel_debug_client}"); $mongrel_debug_client = !$mongrel_debug_client }
+        trap("USR1") { Mongrel.log(:notice, "USR1 received, toggling $mongrel_debug_client to #{!$mongrel_debug_client}"); $mongrel_debug_client = !$mongrel_debug_client }
         # restart
-        trap("USR2") { log(:notice, "USR2 signal received."); stop(true) }
+        trap("USR2") { Mongrel.log(:notice, "USR2 signal received."); stop(true) }
 
-        log(:notice, "Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart).")
+        Mongrel.log(:notice, "Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart).")
       else
-        log(:notice, "Signals ready.  INT => stop (no restart).")
+        Mongrel.log(:notice, "Signals ready.  INT => stop (no restart).")
       end
     end
 
diff --git a/lib/mongrel/debug.rb b/lib/mongrel/debug.rb
index 220af60..d2363fb 100644
--- a/lib/mongrel/debug.rb
+++ b/lib/mongrel/debug.rb
@@ -97,7 +97,7 @@ module RequestLog
     def process(request,response)
       p = request.params
       #STDERR.puts "#{p['REMOTE_ADDR']} - [#{Time.now.httpdate}] \"#{p['REQUEST_METHOD']} #{p["REQUEST_URI"]} HTTP/1.1\""
-      log(:info, "#{p['REMOTE_ADDR']} \"#{p['REQUEST_METHOD']} #{p["REQUEST_URI"]} HTTP/1.1\"")
+      Mongrel.log(:info, "#{p['REMOTE_ADDR']} \"#{p['REQUEST_METHOD']} #{p["REQUEST_URI"]} HTTP/1.1\"")
     end
   end
   
diff --git a/lib/mongrel/logger.rb b/lib/mongrel/logger.rb
index e3dee7f..1adb593 100644
--- a/lib/mongrel/logger.rb
+++ b/lib/mongrel/logger.rb
@@ -3,10 +3,6 @@
 #       Merb:  http://merbivore.com
 module Mongrel
 
-  #class << self
-  #  attr_accessor :logger
-  #end
-
   class Log
     attr_accessor :logger
     attr_accessor :log_level
@@ -20,12 +16,11 @@ module Mongrel
       @logger    = initialize_io(log)
       @log_level = Levels[:name][log_level]
 
-      if !RUBY_PLATFORM.match(/java|mswin/) &&
-         !(@log == STDOUT) &&
-        @log.respond_to?(:write_nonblock)
-        
+      if !RUBY_PLATFORM.match(/java|mswin/) && !(@log == STDOUT) &&
+           @log.respond_to?(:write_nonblock)
         @aio = true
       end
+      $MongrelLogger = self
     end
     
     # Writes a string to the logger. Writing of the string is skipped if the string's log level is
@@ -52,7 +47,7 @@ module Mongrel
       else
         @log = open(log, (File::WRONLY | File::APPEND | File::CREAT))
         @log.sync = true
-        @log.write("#{Time.now.httpdate} Logfile created")
+        @log.write("#{Time.now.httpdate} Logfile created\n")
       end
     end
 
@@ -60,7 +55,9 @@ module Mongrel
   
   # Convenience wrapper for logging, allows us to use Mongrel.log
   def self.log(level, string)
-    logger.log(level,string)
+    # If no logger was defined, log to STDOUT.
+    $MongrelLogger ||= Mongrel::Log.new(STDOUT, :debug)
+    $MongrelLogger.log(level,string)
   end
   
 end
diff --git a/lib/mongrel/rails.rb b/lib/mongrel/rails.rb
index f0ecff6..62f7d67 100644
--- a/lib/mongrel/rails.rb
+++ b/lib/mongrel/rails.rb
@@ -161,9 +161,9 @@ module Mongrel
           raise "Rails was not configured.  Read the docs for RailsConfigurator."
         end
 
-        log "Reloading Rails..."
+        Mongrel.log(:info, "Reloading Rails...")
         @rails_handler.reload!
-        log "Done reloading Rails."
+        Mongrel.log(:info, "Done reloading Rails.")
 
       end
 
@@ -175,9 +175,9 @@ module Mongrel
 
         unless RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/
           # rails reload
-          trap("HUP") { log "HUP signal received."; reload!          }
+          trap("HUP") { Mongrel.log(:info, "HUP signal received."); reload! }
 
-          log "Rails signals registered.  HUP => reload (without restart).  It might not work well."
+          Mongrel.log(:info, "Rails signals registered.  HUP => reload (without restart).  It might not work well.")
         end
       end
     end