class Falcon::Verbose

def annotate(env, task = Async::Task.current)

def annotate(env, task = Async::Task.current)
	request_method = env['REQUEST_METHOD']
	request_path = env['PATH_INFO']
	remote_address = env['REMOTE_ADDR']
	
	task.annotate("#{request_method} #{request_path} for #{remote_address}")
end

def call(env)

def call(env)
	start_time = Time.now
	
	annotate(env)
	
	response = @app.call(env)
ensure
	log(start_time, env, response, $!)
end

def initialize(app, logger = Async.logger)

def initialize(app, logger = Async.logger)
	@app = app
	@logger = logger
end

def log(start_time, env, response, error)

def log(start_time, env, response, error)
	duration = Time.now - start_time
	
	request_method = env['REQUEST_METHOD']
	request_path = env['PATH_INFO']
	
	if response
		status, headers, body = response
		@logger.info "#{request_method} #{request_path} -> #{status}; Content length #{headers.fetch('Content-Length', '-')} bytes; took #{duration} seconds"
	else
		@logger.info "#{request_method} #{request_path} -> #{error}; took #{duration} seconds"
	end
end