LoginSignup
2
1

More than 5 years have passed since last update.

Ruboty | Ruboty と Logger #ruboty

Posted at

Ruboty | Ruboty と Logger #ruboty

概要

Ruboty と Logger について

Ruboty の Logging

Ruboty では ruby 標準の Logger を拡張し、 Ruboty.logger 経由で呼び出し可能です。

require "logger"

module Ruboty
  class Logger < Logger
    def initialize(*)
      super
      @formatter = ->(severity, time, name, message) { "#{message}\n" }
    end
  end
end
module Ruboty
  class << self
    include Mem

    def logger
      @logger ||= Ruboty::Logger.new($stdout)
    end
# 略

試用

Ruboty に標準で付属している ping action を編集して動作確認してみます

編集内容

module Ruboty
  module Actions
    class Ping < Base
      def call
        message.reply(pong)
      end

      private

      def ping
        # この行を追加
        Ruboty.logger.info '@@@@@@@@@@@@@ Use Ruboty.logger @@@@@@@@@@@@@@@'
        message.body[-4..-1]
      end

      def pong
        ping.gsub(/i/i, "i" => "o", "I" => "O")
      end
    end
  end
end

編集前実行結果

> ruboty ping
pong

編集後実行結果

> ruboty ping
@@@@@@@@@@@@@ Use Ruboty.logger @@@@@@@@@@@@@@@
pong

おまけ

おまけ要素として Ruby の Logger 基礎

Log の出力先

Logger.new に任意の引数を与えることで、出力先を設定できます。

  • サンプルコード
require 'logger'
stdout_logger = Logger.new(STDOUT)
stdout_logger.info "sample output to STDOUT"
file_logger = Logger.new('hoge.log')
file_logger.info "sample output to hoge.log"
stdout_logger.info File.read('hoge.log')
  • サンプル出力
I, [2014-12-09T22:40:35.895133 #5664]  INFO -- : sample output to STDOUT
I, [2014-12-09T22:40:35.897640 #5664]  INFO -- : # Logfile created on 2014-12-09 22:40:35 +0900 by logger.rb/44203
I, [2014-12-09T22:40:35.896637 #5664]  INFO -- : sample output to hoge.log

Log Level

Logger オブジェクトにはログレベルを設定可能であり、
設定したレベルよりも低いログは無視されます。

以下の5段階が用意されています。

Level Description
FATAL プログラムをクラッシュさせるような制御不可能なエラー
ERROR エラー
WARN 警告
INFO 一般的な情報
DEBUG 低レベルの情報
  • サンプルコード
require 'logger'

def output_logs(logger)
  logger.info("info")
  logger.debug("debug")
end

logger = Logger.new(STDOUT)
logger.level = Logger::INFO

output_logs(logger)
puts "--------------------------------"

logger.level = Logger::DEBUG

output_logs(logger)
  • サンプル出力
I, [2014-12-09T22:22:17.029072 #7436]  INFO -- : info
--------------------------------
I, [2014-12-09T22:22:17.029072 #7436]  INFO -- : info
D, [2014-12-09T22:22:17.029072 #7436] DEBUG -- : debug

フォーマット

Logger#formatter=(formatter) を利用して、フォーマットを変更可能

  • サンプルコード
require 'logger'
logger = Logger.new(STDOUT)
logger.formatter = proc { |severity, datetime, progname, msg|
  [
    "severity:#{severity}",
    "datetime:#{datetime.strftime('%Y/%m/%d %H:%m:%S.%L')}",
    "msg:#{msg}"
  ].join("\t") + "\n"
}
logger.info 'formatter test1'
sleep 1
logger.info 'formatter test2'
  • サンプル出力
severity:INFO   datetime:2014/12/09 22:12:35.565        msg:formatter test1
severity:INFO   datetime:2014/12/09 22:12:36.568        msg:formatter test2

その他

その他の機能については るりま のドキュメント参照
http://docs.ruby-lang.org/ja/2.1.0/class/Logger.html

参照

2
1
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
2
1