君の瞳はまるでルビー - Ruby 関連まとめサイト

xmlrpc モジュールについて - サーバのログ出力先の指定

最終更新: 2015-03-31 (火) 21:53:22 (2870d)

xmlrpc モジュールについて

XMLRPC::Server クラスは標準出力と標準エラー出力にログを出力します。このログ出力先を変更する方法について説明します。

概要

以下にサンプルを示します。

# coding: UTF-8

require 'xmlrpc/server'
require 'logger'

# XML-RPC のメソッドを定義する。
# 足し算と割り算の2つの機能を提供する。
class Calculator

	INTERFACE = XMLRPC::interface("calculator") {
		meth 'int add(int, int)', 'Add two numbers'
		meth 'int div(int, int)', 'Divide two numbers'
	}

	def add(a, b) a + b end
	def div(a, b) a / b end

end

# カスタムサーバを定義する。
# XMLRPC::Server クラスをコピーして一部改変して作ったものであり、大部分は XMLRPC::Server と一緒である。
# ポイントは独自に定義した Logger を使って WEBrick::HTTPServer オブジェクトを作成していること。
class CustomXMLRPCServer < XMLRPC::WEBrickServlet

	def initialize(port=8080, host="127.0.0.1", maxConnections = 4, webrick_logger = Logger.new(nil), access_logger = Logger.new(nil), *args)
		super(*args)
		require 'webrick'

		@server = WEBrick::HTTPServer.new(:Port => port, :BindAddress => host, :MaxClients => maxConnections, :Logger => webrick_logger, :AccessLog => access_logger)
		@server.mount("/", self)
	end

	def serve
		signals = %w[INT TERM HUP] & Signal.list.keys
		signals.each { |signal| trap(signal) { @server.shutdown } }

		@server.start
	end

	def shutdown
		@server.shutdown
	end

end

# サーバを作成し、Calculator インターフェイスを登録する。
server = CustomXMLRPCServer.new(8080, "127.0.0.1", 4, Logger.new("webrick.log", 10), Logger.new("access.log", 10))
server.add_handler(Calculator::INTERFACE, Calculator.new)

# サーバを動かす。
server.serve

このプログラムは、以下の2種類のログファイルを出力します。

  • webrick.log
    • サーバ内部の処理に関するログ。
  • access.log
    • Web サーバへのアクセスログ。

既存に用意された XMLRPC::Server クラスは、ログ出力先の指定が固定されており、変更できません。

そこで XMLRPC::Server を参考に新しいクラスを自分で定義します。幸いにも XMLRPC::Server クラスはとても小さなものなので簡単です。

WEBrick::HTTPServer.new オブジェクトを作成する際に :Logger と :AccessLog に logger モジュールの Logger オブジェクトを渡すことでログ出力先を指定できます。

コメント

本ページの内容に関して何かコメントがある方は、以下に記入してください。

コメントはありません。 コメント/xmlrpc/server/log

お名前: