mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
36 lines
747 B
Ruby
36 lines
747 B
Ruby
|
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
|