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