diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2008-12-18 14:42:06 -0800 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2008-12-18 14:42:06 -0800 |
commit | a10e473b8124f16538a2616858e243408f6ffcee (patch) | |
tree | 45e73db3df29df5168c7875e18729757b838a0de /railties/lib/rails/rack/log_tailer.rb | |
parent | 6703f909c705ba8405360f23d8d0959bf11514a8 (diff) | |
download | rails-a10e473b8124f16538a2616858e243408f6ffcee.tar.gz rails-a10e473b8124f16538a2616858e243408f6ffcee.tar.bz2 rails-a10e473b8124f16538a2616858e243408f6ffcee.zip |
Rename Rails::Rack::Logger -> LogTailer. Speed up log mtime checks.
Diffstat (limited to 'railties/lib/rails/rack/log_tailer.rb')
-rw-r--r-- | railties/lib/rails/rack/log_tailer.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/railties/lib/rails/rack/log_tailer.rb b/railties/lib/rails/rack/log_tailer.rb new file mode 100644 index 0000000000..a237cee6bc --- /dev/null +++ b/railties/lib/rails/rack/log_tailer.rb @@ -0,0 +1,35 @@ +module Rails + module Rack + class LogTailer + EnvironmentLog = "#{File.expand_path(Rails.root)}/log/#{Rails.env}.log" + + def initialize(app, log = nil) + @app = app + + path = Pathname.new(log || EnvironmentLog).cleanpath + @cursor = ::File.size(path) + @last_checked = Time.now.to_f + + @file = ::File.open(path, 'r') + end + + def call(env) + response = @app.call(env) + tail_log + response + end + + def tail_log + @file.seek @cursor + + mod = @file.mtime.to_f + if mod > @last_checked + contents = @file.read + @last_checked = mod + @cursor += contents.size + $stdout.print contents + end + end + end + end +end |