<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -31,7 +31,7 @@ module Merb
         subklasses = subclasses.dup
         until subclasses.empty?
           bootloader = subclasses.shift
-          puts &quot;Loading: #{bootloader}&quot; if ENV['DEBUG']
+           Merb.logger.debug!(&quot;Loading: #{bootloader}&quot;)if ENV['DEBUG']
           Object.full_const_get(bootloader).run
         end  
         subclasses = subklasses
@@ -382,18 +382,20 @@ class Merb::BootLoader::MixinSessionContainer &lt; Merb::BootLoader
       Merb.framework_root / &quot;merb-core&quot; / &quot;dispatch&quot; / &quot;session&quot; / &quot;memory&quot;,
       &quot;Using in-memory sessions; sessions will be lost whenever the server stops.&quot;)
 
+    Merb.register_session_type('memcache',
+      Merb.framework_root /  &quot;merb-core&quot; / &quot;dispatch&quot; / &quot;session&quot; / &quot;memcached&quot;,
+      &quot;Using 'memcached' sessions&quot;)
+      
     Merb.register_session_type('cookie', # Last session type becomes the default
       Merb.framework_root /  &quot;merb-core&quot; / &quot;dispatch&quot; / &quot;session&quot; / &quot;cookie&quot;,
       &quot;Using 'share-nothing' cookie sessions (4kb limit per client)&quot;)
 
-   Merb.register_session_type('memcache', # Last session type becomes the default
-     Merb.framework_root /  &quot;merb-core&quot; / &quot;dispatch&quot; / &quot;session&quot; / &quot;memcached&quot;,
-     &quot;Using 'memcached' sessions&quot;)
+
         
     Merb::Controller.class_eval do
       session_store = Merb::Config[:session_store].to_s
       if [&quot;&quot;, &quot;false&quot;, &quot;none&quot;].include?(session_store)
-        Merb.logger.info &quot;Not Using Sessions&quot;
+        Merb.logger.warn &quot;Not Using Sessions&quot;
       elsif reg = Merb.registered_session_types[session_store]
         if session_store == &quot;cookie&quot;
           Merb::BootLoader::MixinSessionContainer.check_for_secret_key
@@ -401,15 +403,15 @@ class Merb::BootLoader::MixinSessionContainer &lt; Merb::BootLoader
         end
         require reg[:file]
         include ::Merb::SessionMixin
-        Merb.logger.info reg[:description]
+        Merb.logger.warn reg[:description]
       else
-        Merb.logger.info &quot;Session store not found, '#{Merb::Config[:session_store]}'.&quot;
-        Merb.logger.info &quot;Defaulting to CookieStore Sessions&quot;
+        Merb.logger.warn &quot;Session store not found, '#{Merb::Config[:session_store]}'.&quot;
+        Merb.logger.warn &quot;Defaulting to CookieStore Sessions&quot;
         Merb::BootLoader::MixinSessionContainer.check_for_secret_key
         Merb::BootLoader::MixinSessionContainer.check_for_session_id_key
         require Merb.registered_session_types['cookie'][:file]
         include ::Merb::SessionMixin
-        Merb.logger.info &quot;(plugin not installed?)&quot;
+        Merb.logger.warn &quot;(plugin not installed?)&quot;
       end
     end
         
@@ -427,7 +429,7 @@ class Merb::BootLoader::MixinSessionContainer &lt; Merb::BootLoader
   # does not exist or is shorter than 16 charaters.
   def self.check_for_secret_key
     unless Merb::Config[:session_secret_key] &amp;&amp; (Merb::Config[:session_secret_key].length &gt;= 16)
-      Merb.logger.info(&quot;You must specify a session_secret_key in your merb.yml, and it must be at least 16 characters\nbailing out...&quot;)
+      Merb.logger.warn(&quot;You must specify a session_secret_key in your merb.yml, and it must be at least 16 characters\nbailing out...&quot;)
       exit!
     end            
     Merb::Controller._session_secret_key = Merb::Config[:session_secret_key]</diff>
      <filename>lib/merb-core/bootloader.rb</filename>
    </modified>
    <modified>
      <diff>@@ -25,14 +25,14 @@ module Kernel
         else
           gem(name, *ver) if ver
           require name
-          Merb.logger.info(&quot;loading gem '#{name}' from #{__app_file_trace__.first} ...&quot;)
+          Merb.logger.info!(&quot;loading gem '#{name}' from #{__app_file_trace__.first} ...&quot;)
         end
       rescue LoadError
         if try_framework
           try_framework = false
           retry
         else
-          Merb.logger.info(&quot;loading gem '#{name}' from #{__app_file_trace__.first} ...&quot;)
+          Merb.logger.info!(&quot;loading gem '#{name}' from #{__app_file_trace__.first} ...&quot;)
           # Failed requiring as a gem, let's try loading with a normal require.
           require name
         end
@@ -292,7 +292,7 @@ module Kernel
     # Define debugger method so that code even works if debugger was not
     # requested. Drops a note to the logs that Debugger was not available.
     def debugger
-       Merb.logger.info &quot;\n***** Debugger requested, but was not &quot; + 
+       Merb.logger.info! &quot;\n***** Debugger requested, but was not &quot; + 
                         &quot;available: Start server with --debugger &quot; +
                         &quot;to enable *****\n&quot;
     end</diff>
      <filename>lib/merb-core/core_ext/kernel.rb</filename>
    </modified>
    <modified>
      <diff>@@ -11,7 +11,6 @@ module Merb
     # ==== Parameters
     # base&lt;Class&gt;:: The class to which the SessionMixin is mixed into.
     def setup_session
-      Merb.logger.info(&quot;Setting Up Cookie Store Sessions&quot;)
       request.session = Merb::CookieSession.new(cookies[_session_id_key], _session_secret_key)
       @original_session = request.session.read_cookie
     end
@@ -19,7 +18,6 @@ module Merb
     # Finalizes the session by storing the session in a cookie, if the session
     # has changed.
     def finalize_session
-      Merb.logger.info(&quot;Finalize Cookie Store Session&quot;)
       new_session = request.session.read_cookie
       
       if @original_session != new_session</diff>
      <filename>lib/merb-core/dispatch/session/cookie.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,6 @@ module Merb
     # ==== Parameters
     # base&lt;Class&gt;:: The class to which the SessionMixin is mixed into.
     def setup_session
-      Merb.logger.info(&quot;Setting up session&quot;)
       before = cookies[_session_id_key]
       request.session , cookies[_session_id_key] = Merb::MemorySession.persist(cookies[_session_id_key])
       @_new_cookie = cookies[_session_id_key] != before
@@ -17,7 +16,6 @@ module Merb
     # Finalizes the session by storing the session ID in a cookie, if the
     # session has changed.
     def finalize_session
-      Merb.logger.info(&quot;Finalize session&quot;)
       set_cookie(_session_id_key, request.session.session_id, Time.now + _session_expiry) if (@_new_cookie || request.session.needs_new_cookie)
     end
 </diff>
      <filename>lib/merb-core/dispatch/session/memory.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,6 +14,13 @@ require &quot;time&quot; # httpdate
 #   Merb.logger.info(message&lt;String&gt;,&amp;block)
 #   Merb.logger.debug(message&lt;String&gt;,&amp;block)
 #
+# Logging with autoflush:
+#   Merb.logger.fatal!(message&lt;String&gt;,&amp;block)
+#   Merb.logger.error!(message&lt;String&gt;,&amp;block)
+#   Merb.logger.warn!(message&lt;String&gt;,&amp;block)
+#   Merb.logger.info!(message&lt;String&gt;,&amp;block)
+#   Merb.logger.debug!(message&lt;String&gt;,&amp;block)
+#
 # Flush the buffer to 
 #   Merb.logger.flush
 #
@@ -130,7 +137,7 @@ module Merb
       if log_level &amp;&amp; Levels[log_level.to_sym]
         @level = Levels[log_level.to_sym]
       elsif Merb.environment == &quot;production&quot;
-        @level = Levels[:error]
+        @level = Levels[:warn]
       else
         @level = Levels[:debug]
       end
@@ -168,10 +175,6 @@ module Merb
       message = &quot;&quot;
       message &lt;&lt; delimiter
       message &lt;&lt; string if string
-      if block_given?
-        message &lt;&lt; delimiter
-        message &lt;&lt; yield
-      end
       message &lt;&lt; &quot;\n&quot; unless message[-1] == ?\n
       @buffer &lt;&lt; message
       flush if @auto_flush
@@ -185,19 +188,33 @@ module Merb
       class_eval &lt;&lt;-LEVELMETHODS, __FILE__, __LINE__
 
       # Appends a message to the log if the log level is at least as high as
-      # the log level of the logger. The methods yield to an optional block and
-      # the output of this block will be appended to the message.
+      # the log level of the logger.
       #
       # ==== Parameters
       # string&lt;String&gt;:: The message to be logged. Defaults to nil.
-      # &amp;block:: The output of this block is added to the message.
       #
       # ==== Returns
-      # String:: The resulting message added to the log file.
-      def #{name}(message = nil, &amp;block)
-        self.&lt;&lt;(message, &amp;block) if #{number} &gt;= level
+      # self:: The logger object for chaining.
+      def #{name}(message = nil)
+        self &lt;&lt; message if #{number} &gt;= level
+        self
       end
 
+      # Appends a message to the log if the log level is at least as high as
+      # the log level of the logger. The bang! version of the method also auto
+      # flushes the log buffer to disk.
+      #
+      # ==== Parameters
+      # string&lt;String&gt;:: The message to be logged. Defaults to nil.
+      #
+      # ==== Returns
+      # self:: The logger object for chaining.
+      def #{name}!(message = nil)
+        self &lt;&lt; message if #{number} &gt;= level
+        flush
+        self
+      end
+      
       # ==== Returns
       # Boolean:: True if this level will be logged by this logger.
       def #{name}?</diff>
      <filename>lib/merb-core/logger.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,8 +14,7 @@ module Merb
       # :port&lt;Fixnum&gt;:: The port Thin should bind to.
       # :app&lt;String&gt;&gt;:: The application name.
       def self.start(opts={})
-        Merb.logger.info(&quot;Using Ebb adapter&quot;)
-        Merb.logger.flush
+        Merb.logger.warn!(&quot;Using Ebb adapter&quot;)
         server = ::Ebb::Server.new(opts[:app], opts)
         server.start
       end</diff>
      <filename>lib/merb-core/rack/adapter/ebb.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,8 +14,7 @@ module Merb
       # :port&lt;Fixnum&gt;:: The port Mongrel should bind to.
       # :app&lt;String&gt;&gt;:: The application name.
       def self.start(opts={})
-        Merb.logger.info(&quot;Using EventedMongrel adapter: #{opts.inspect}&quot;)
-        Merb.logger.flush
+        Merb.logger.warn!(&quot;Using EventedMongrel adapter&quot;)
         server = ::Mongrel::HttpServer.new(opts[:host], opts[:port].to_i)
         server.register('/', ::Merb::Rack::Handler::Mongrel.new(opts[:app]))
         server.run.join</diff>
      <filename>lib/merb-core/rack/adapter/evented_mongrel.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,8 +8,7 @@ module Merb
       # ==== Options (opts)
       # :app&lt;String&gt;&gt;:: The application name.
       def self.start(opts={})
-        Merb.logger.info(&quot;Using FastCGI adapter&quot;)
-        Merb.logger.flush
+        Merb.logger.warn!(&quot;Using FastCGI adapter&quot;)
         Rack::Handler::FastCGI.run(opts[:app])
       end
     end</diff>
      <filename>lib/merb-core/rack/adapter/fcgi.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,8 +15,7 @@ module Merb
       # :port&lt;Fixnum&gt;:: The port Mongrel should bind to.
       # :app&lt;String&gt;&gt;:: The application name.
       def self.start(opts={})
-        Merb.logger.info(&quot;Using Mongrel adapter&quot;)
-        Merb.logger.flush
+        Merb.logger.warn!(&quot;Using Mongrel adapter&quot;)
         server = ::Mongrel::HttpServer.new(opts[:host], opts[:port].to_i)
         server.register('/', ::Merb::Rack::Handler::Mongrel.new(opts[:app]))
         server.run.join</diff>
      <filename>lib/merb-core/rack/adapter/mongrel.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,8 +14,7 @@ module Merb
       # :port&lt;Fixnum&gt;:: The port Thin should bind to.
       # :app&lt;String&gt;&gt;:: The application name.
       def self.start(opts={})
-        Merb.logger.info(&quot;Using Thin adapter&quot;)
-        Merb.logger.flush
+        Merb.logger.warn!(&quot;Using Thin adapter&quot;)
         if opts[:host].include?('/')
           opts[:host] =  &quot;#{opts[:host]}-#{opts[:port]}&quot;
         end  </diff>
      <filename>lib/merb-core/rack/adapter/thin.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,8 +14,7 @@ module Merb
       # :port&lt;Fixnum&gt;:: The port WEBrick should bind to.
       # :app&lt;String&gt;&gt;:: The application name.
       def self.start(opts={})
-        Merb.logger.info(&quot;Using Webrick adapter&quot;)
-        Merb.logger.flush
+        Merb.logger.warn!(&quot;Using Webrick adapter&quot;)
       
         options = {
           :Port        =&gt; opts[:port],</diff>
      <filename>lib/merb-core/rack/adapter/webrick.rb</filename>
    </modified>
    <modified>
      <diff>@@ -50,7 +50,7 @@ module Merb
       # ==== Returns
       # Boolean:: True if file exists under the server root and is readable.
       def file_exist?(path)
-        full_path = ::File.join(@static_server.root, ::Rack::Utils.unescape(path))
+        full_path = ::File.join(@static_server.root, ::Merb::Request.unescape(path))
         ::File.file?(full_path) &amp;&amp; ::File.readable?(full_path)
       end
 </diff>
      <filename>lib/merb-core/rack/application.rb</filename>
    </modified>
    <modified>
      <diff>@@ -163,7 +163,7 @@ module Merb
       # ==== Alternatives
       # If group is left out, the user will be used as the group.
       def change_privilege(user, group=user)
-        Merb.logger.info &quot;Changing privileges to #{user}:#{group}&quot;
+        Merb.logger.warn! &quot;Changing privileges to #{user}:#{group}&quot;
         
         uid, gid = Process.euid, Process.egid
         target_uid = Etc.getpwnam(user).uid</diff>
      <filename>lib/merb-core/server.rb</filename>
    </modified>
    <modified>
      <diff>@@ -52,7 +52,7 @@ describe &quot;Kernel misc.&quot; do
   end
   
   it &quot;should throw a useful error if there's no debugger&quot; do
-    Merb.logger.should_receive(:info).with &quot;\n***** Debugger requested, but was not &quot; + 
+    Merb.logger.should_receive(:info!).with &quot;\n***** Debugger requested, but was not &quot; + 
                         &quot;available: Start server with --debugger &quot; +
                         &quot;to enable *****\n&quot;
     Kernel.debugger</diff>
      <filename>spec/private/core_ext/kernel_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -47,7 +47,7 @@ describe Merb::Logger do
     it &quot;should set the log level to :error (6) when Merb.environment is production&quot; do
       Merb.should_receive(:environment).twice.and_return(&quot;production&quot;)
       @logger.set_log(Merb.log_path / &quot;production.log&quot;)
-      @logger.level.should eql(6)
+      @logger.level.should eql(4)
     end
     
     it &quot;should initialize the buffer to an empty array&quot; do</diff>
      <filename>spec/public/logger/logger_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>a90df4f413db9c6377f776b32da67e3b83131880</id>
    </parent>
  </parents>
  <author>
    <name>Ezra Zygmuntowicz</name>
    <email>ez@engineyard.com</email>
  </author>
  <url>http://github.com/wycats/merb-core/commit/d4e533e96774982ff117c82bc209e1245be64a49</url>
  <id>d4e533e96774982ff117c82bc209e1245be64a49</id>
  <committed-date>2008-03-06T00:04:49-08:00</committed-date>
  <authored-date>2008-03-06T00:04:49-08:00</authored-date>
  <message>update the logger. no longer accept an optional block to call.

added bang! versions of all the debug,info,warn log levels that flushes
the log buffer immediately.

adapt the code base to use the bnag! version for bootloader log messages

default log level in production mode is now :warn</message>
  <tree>5891218bee97d71d9e81f40d0cc30ad02281350a</tree>
  <committer>
    <name>Ezra Zygmuntowicz</name>
    <email>ez@engineyard.com</email>
  </committer>
</commit>
