LoginSignup
0
0

More than 1 year has passed since last update.

Sinatra + rack 環境にて、アクセスログとアプリログを分ける方法

Posted at

sinatra で、 config.ru を書いて rackup で動作させている場合、アクセスログとアプリログが混じってしまいます。

Rackの吐き出す アクセスログは access.log、自分のアプリログは app.log に出せるようにする方法。

アプリログ用のクラスを作る

app_logger.rb
class AppLog
    def initialize(app, logger)
      @app, @logger = app, logger
    end

    def call(env)
      env["app.logger"] = @logger
      @app.call(env)
    end
end

config.ru にて、二つのロガーを指定する

config.ru
require 'logger'

require_relative './app_logger'
require_relative './app'

logdir = File.dirname(__FILE__) + "/log"
access_logger = ::Logger.new(logdir + '/access.log')
app_logger = ::Logger.new(logdir + '/app.log')

def access_logger.write(msg); self << msg; end
use Rack::CommonLogger, access_logger		# アクセスログ
use AppLog, app_logger		# アプリログ


run MyApp::Application

sinatraメインアプリで、自作のロガーを使えるようにする

app.rb

require "sinatra"

Module MyApp
		def logger; env['app.logger'] || env['rack.logger']; end

		get '/' do
			logger.info "HELLO!"
			erb :index
		end
end

できました

これで / にアクセスすると、 app.log に "HELLO!"と記載されます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0