You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2012/04/05 13:07:52 UTC

[PATCH core] Core: Fixed missing syslog library under Windows environment (DTACLOUD-186)

From: Michal Fojtik <mf...@redhat.com>

Previosly when Deltacloud was started under Windows with production environment,
it throws an exception because of missing 'syslog' library.  This patch should
fix this issue and Deltacloud should log to STDOUT if it is not able locate the
syslog library.

Signed-off-by: Michal fojtik <mf...@redhat.com>
---
 server/lib/deltacloud/server.rb   |    5 ++---
 server/lib/sinatra/rack_syslog.rb |   27 +++++++++++++++++----------
 2 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/server/lib/deltacloud/server.rb b/server/lib/deltacloud/server.rb
index f0f8cbc..7b499d9 100644
--- a/server/lib/deltacloud/server.rb
+++ b/server/lib/deltacloud/server.rb
@@ -62,11 +62,10 @@ end
 
 configure :production do
   use Rack::SyslogLogger
+  set :logger, SyslogFile.new
   disable :logging
   enable :show_errors
-  set :dump_errors, false
-  $stdout = SyslogFile.new
-  $stderr = $stdout
+  enable :dump_errors
 end
 
 configure :development do
diff --git a/server/lib/sinatra/rack_syslog.rb b/server/lib/sinatra/rack_syslog.rb
index f7c3d53..5565179 100644
--- a/server/lib/sinatra/rack_syslog.rb
+++ b/server/lib/sinatra/rack_syslog.rb
@@ -1,10 +1,16 @@
-require 'syslog'
+begin
+  require 'syslog'
+  USE_SYSLOG = true
+rescue LoadError => e
+  USE_SYSLOG = false
+end
+
 require 'sinatra/body_proxy'
 
 class SyslogFile < File
 
   def initialize
-    @log = Syslog.open($0, Syslog::LOG_PID | Syslog::LOG_LOCAL5)
+    @log = USE_SYSLOG ? Syslog.open($0, Syslog::LOG_PID | Syslog::LOG_LOCAL5) : Logger.new(STDOUT)
   end
 
   def write(string)
@@ -13,11 +19,11 @@ class SyslogFile < File
   end
 
   def info(msg)
-    @log.info("%s", msg)
+    @log.info("%s" % msg)
   end
 
   def err(msg)
-    @log.err("%s", msg)
+    @log.err("%s" % msg)
   end
 
   alias :warning :err
@@ -36,23 +42,24 @@ module Rack
     # Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
     # lilith.local - - [07/Aug/2006 23:58:02] "GET / HTTP/1.1" 500 -
     #             %{%s - %s [%s] "%s %s%s %s" %d %s\n} %
-    FORMAT = %{%s - %s [%s] "%s %s%s %s" %d %s %0.4f\n}
+    FORMAT = %{%s - %s [%s] "%s %s%s %s" %d %s %0.4f}
 
     def initialize(app, logger=nil)
       @app = app
-      @logger = logger || $stdout
+      @logger = logger || @app.settings.logger || $stdout
     end
 
     def call(env)
       began_at = Time.now
       status, header, body = @app.call(env)
       header = Utils::HeaderHash.new(header)
-      body = Rack::BodyProxy.new(body) { log(env, status, header, began_at) }
+      body = Rack::BodyProxy.new(body) do
+        log(env, status, header, began_at)
+      end
+      body.close
       [status, header, body]
     end
 
-    private
-
     def log(env, status, header, began_at)
       now = Time.now
       length = extract_content_length(header)
@@ -63,7 +70,7 @@ module Rack
         method = :info
       end
 
-      logger = @logger || env['rack.errors']
+      logger = @logger
       logger.send(method, FORMAT % [
         env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-",
         env["REMOTE_USER"] || "-",
-- 
1.7.9.1


Re: [PATCH core] Core: Fixed missing syslog library under Windows environment (DTACLOUD-186)

Posted by "marios@redhat.com" <ma...@redhat.com>.
bump - in case this gets forgotten (seems ok for push - ACK by reporter
in https://issues.apache.org/jira/browse/DTACLOUD-186 )

On 05/04/12 14:07, mfojtik@redhat.com wrote:
> From: Michal Fojtik <mf...@redhat.com>
> 
> Previosly when Deltacloud was started under Windows with production environment,
> it throws an exception because of missing 'syslog' library.  This patch should
> fix this issue and Deltacloud should log to STDOUT if it is not able locate the
> syslog library.
> 
> Signed-off-by: Michal fojtik <mf...@redhat.com>
> ---
>  server/lib/deltacloud/server.rb   |    5 ++---
>  server/lib/sinatra/rack_syslog.rb |   27 +++++++++++++++++----------
>  2 files changed, 19 insertions(+), 13 deletions(-)
> 
> diff --git a/server/lib/deltacloud/server.rb b/server/lib/deltacloud/server.rb
> index f0f8cbc..7b499d9 100644
> --- a/server/lib/deltacloud/server.rb
> +++ b/server/lib/deltacloud/server.rb
> @@ -62,11 +62,10 @@ end
>  
>  configure :production do
>    use Rack::SyslogLogger
> +  set :logger, SyslogFile.new
>    disable :logging
>    enable :show_errors
> -  set :dump_errors, false
> -  $stdout = SyslogFile.new
> -  $stderr = $stdout
> +  enable :dump_errors
>  end
>  
>  configure :development do
> diff --git a/server/lib/sinatra/rack_syslog.rb b/server/lib/sinatra/rack_syslog.rb
> index f7c3d53..5565179 100644
> --- a/server/lib/sinatra/rack_syslog.rb
> +++ b/server/lib/sinatra/rack_syslog.rb
> @@ -1,10 +1,16 @@
> -require 'syslog'
> +begin
> +  require 'syslog'
> +  USE_SYSLOG = true
> +rescue LoadError => e
> +  USE_SYSLOG = false
> +end
> +
>  require 'sinatra/body_proxy'
>  
>  class SyslogFile < File
>  
>    def initialize
> -    @log = Syslog.open($0, Syslog::LOG_PID | Syslog::LOG_LOCAL5)
> +    @log = USE_SYSLOG ? Syslog.open($0, Syslog::LOG_PID | Syslog::LOG_LOCAL5) : Logger.new(STDOUT)
>    end
>  
>    def write(string)
> @@ -13,11 +19,11 @@ class SyslogFile < File
>    end
>  
>    def info(msg)
> -    @log.info("%s", msg)
> +    @log.info("%s" % msg)
>    end
>  
>    def err(msg)
> -    @log.err("%s", msg)
> +    @log.err("%s" % msg)
>    end
>  
>    alias :warning :err
> @@ -36,23 +42,24 @@ module Rack
>      # Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
>      # lilith.local - - [07/Aug/2006 23:58:02] "GET / HTTP/1.1" 500 -
>      #             %{%s - %s [%s] "%s %s%s %s" %d %s\n} %
> -    FORMAT = %{%s - %s [%s] "%s %s%s %s" %d %s %0.4f\n}
> +    FORMAT = %{%s - %s [%s] "%s %s%s %s" %d %s %0.4f}
>  
>      def initialize(app, logger=nil)
>        @app = app
> -      @logger = logger || $stdout
> +      @logger = logger || @app.settings.logger || $stdout
>      end
>  
>      def call(env)
>        began_at = Time.now
>        status, header, body = @app.call(env)
>        header = Utils::HeaderHash.new(header)
> -      body = Rack::BodyProxy.new(body) { log(env, status, header, began_at) }
> +      body = Rack::BodyProxy.new(body) do
> +        log(env, status, header, began_at)
> +      end
> +      body.close
>        [status, header, body]
>      end
>  
> -    private
> -
>      def log(env, status, header, began_at)
>        now = Time.now
>        length = extract_content_length(header)
> @@ -63,7 +70,7 @@ module Rack
>          method = :info
>        end
>  
> -      logger = @logger || env['rack.errors']
> +      logger = @logger
>        logger.send(method, FORMAT % [
>          env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-",
>          env["REMOTE_USER"] || "-",