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