Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > loggerライブラリ > Loggerクラス

class Logger

クラスの継承リスト: Logger < Logger::Severity < Object < Kernel < BasicObject

要約

ログを記録するためのクラスです。

目次

特異メソッド
new
インスタンスメソッド
<< add log close datetime_format datetime_format= debug debug? error error? fatal fatal? formatter formatter= info info? level sev_threshold level= sev_threshold= progname progname= unknown warn warn?
定数
ProgName SEV_LABEL VERSION

特異メソッド

new(logdev, shift_age = 0, shift_size = 1048576) -> Logger[permalink][rdoc]

Logger オブジェクトを生成します。

[PARAM] logdev:
ログを書き込むファイル名か、 IO オブジェクト(STDOUT, STDERR など)を指定します。
[PARAM] shift_age:
ログファイルを保持する数か、ログファイルを切り替える頻度を指定します。 頻度には daily, weekly, monthly を文字列で指定することができます。 省略すると、ログの保存先を切り替えません。
[PARAM] shift_size:
shift_age を整数で指定した場合のみ有効です。 このサイズでログファイルを切り替えます。

例:

require 'logger'
logger = Logger.new(STDERR)
logger = Logger.new(STDOUT)
logger = Logger.new('logfile.log')

file = File.open('foo.log', File::WRONLY | File::APPEND | File::CREAT)
logger = Logger.new(file, 'daily')

インスタンスメソッド

self << msg -> Integer | nil[permalink][rdoc]

ログを出力します。

[PARAM] msg:
ログに出力するメッセージ。
add(severity, message = nil, progname = nil) -> true[permalink][rdoc]
add(severity, message = nil, progname = nil) { ... } -> true
log(severity, message = nil, progname = nil) -> true
log(severity, message = nil, progname = nil) { ... } -> true

メッセージをログに記録します。

ブロックを与えた場合はブロックを評価した返り値をメッセージとしてログに記録します。 ユーザがこのメソッドを直接使うことはあまりありません。

[PARAM] severity:
ログレベル。Logger クラスで定義されている定数を指定します。 この値がレシーバーに設定されているレベルよりも低い場合、 メッセージは記録されません。
[PARAM] message:
ログに出力するメッセージを文字列か例外オブジェクトを指定します。 省略すると nil が用いられます。
[PARAM] progname:
ログメッセージと一緒に記録するプログラム名を指定します。 省略すると nil が使用されますが、実際には内部で保持されている値が使用されます。


require 'logger'

logger = Logger.new(STDOUT)

logger.add(Logger::FATAL) { 'Fatal error!' }
# 通常はログレベルごとのメソッドを使えばいいので、 add は使わない
logger.fatal('Fatal error!')

# => F, [2019-03-11T00:34:18.037272 #1320] FATAL -- : Fatal error!
#    F, [2019-03-11T00:34:18.037272 #1320] FATAL -- : Fatal error!
close -> nil[permalink][rdoc]

ログ出力に使用していた IO オブジェクトを閉じます。



require 'logger'

logger = Logger.new(STDOUT)

logger.info("test") # => I, [2019-04-16T00:40:11.837898 #2795]  INFO -- : test
logger.close
logger.info("test") # => log writing failed. closed stream
datetime_format -> String | nil[permalink][rdoc]

ログに記録する時の日付のフォーマットです。

デフォルトでは nil ですが、この値が nil の場合は日付のフォーマットとして "%Y-%m-%dT%H:%M:%S.%06d " を使用します。

なお、"%06d" には Time#strftime ではなく、単に Time#usec の 値を String#% でフォーマットしたものが入ります。



require 'logger'

logger = Logger.new(STDOUT)

logger.datetime_format # => nil
logger.debug("test")
logger.datetime_format = '%Y/%m/%dT%H:%M:%S.%06d'
logger.datetime_format # => "%Y/%m/%dT%H:%M:%S.%06d"
logger.debug("test")

# => D, [2019-03-12T22:52:13.674385 #17393] DEBUG -- : test
#    D, [2019/03/12T22:52:13.000012#17393] DEBUG -- : test

[SEE_ALSO] Time#strftime, Logger#datetime_format=

datetime_format=(format)[permalink][rdoc]

ログに記録する時の日付のフォーマットをセットします。



require 'logger'

logger = Logger.new(STDOUT)

logger.datetime_format # => nil
logger.debug("test")
logger.datetime_format = '%Y/%m/%dT%H:%M:%S.%06d' # => "%Y/%m/%dT%H:%M:%S.%06d"
logger.datetime_format # => "%Y/%m/%dT%H:%M:%S.%06d"
logger.debug("test")

# => D, [2019-03-13T23:52:13.674385 #17393] DEBUG -- : test
#    D, [2019/03/13T23:52:13.000012#17393] DEBUG -- : test

[SEE_ALSO] Time#strftime, Logger#datetime_format

debug(progname = nil) -> true[permalink][rdoc]
debug(progname = nil) { ... } -> true

ログレベルが DEBUG のメッセージを出力します。

現在の Logger のログレベルが DEBUG よりも高い場合、メッセージは出力されません。

ブロックを与えなかった場合は、progname をメッセージとしてログを出力します。

ブロックを与えた場合は、ブロックを評価した結果をメッセージとして ログを出力します。

引数とブロックを同時に与えた場合は、progname をプログラム名、ブロックを評価した 結果をメッセージとしてログを出力します。

[PARAM] progname:
ブロックを与えない場合は、メッセージとして文字列または例外オブジェクトを指定します。 ブロックを与えた場合は、プログラム名を文字列として与えます。

例:

logger.debug "Waiting for input from user"
# ...
logger.debug { "User typed #{input}" }

logger.debug("MainApp") { "Received connection from #{ip}" }
debug? -> bool[permalink][rdoc]

現在の Logger オブジェクトが DEBUG 以上のログレベルのメッセージを記録するなら 真を返します。



require 'logger'

logger = Logger.new(STDOUT, level: Logger::Severity::DEBUG)
logger.debug? # => true
logger = Logger.new(STDOUT, level: Logger::Severity::INFO)
logger.debug? # => false
error(progname = nil) { ... } -> true[permalink][rdoc]
error(progname = nil) -> true

ERROR 情報を出力します。

ブロックを与えなかった場合は、progname をメッセージとしてログを出力します。

ブロックを与えた場合は、ブロックを評価した結果をメッセージとして ログを出力します。

引数とブロックを同時に与えた場合は、progname をプログラム名、ブロックを評価した 結果をメッセージとしてログを出力します。

[PARAM] progname:
ブロックを与えない場合は、メッセージとして文字列または例外オブジェクトを指定します。 ブロックを与えた場合は、プログラム名を文字列として与えます。


require 'logger'

logger = Logger.new(STDOUT)
logger.error("error1") # => E, [2019-03-15T22:54:37.925635 #14878] ERROR -- : error1
logger.error("MainApp") { "error2" } # => E, [2019-03-16T03:50:58.062094 #2172] ERROR -- MainApp: error2
logger.level = Logger::Severity::FATAL
# 出力されない
logger.error("error3")

[SEE_ALSO] Logger#debug

error? -> bool[permalink][rdoc]

現在の Logger オブジェクトが ERROR 以上のログレベルのメッセージを記録するなら 真を返します。



require 'logger'

logger = Logger.new(STDOUT)
logger.error? # => true
logger.level = Logger::Severity::FATAL
logger.error? # => false
fatal(progname = nil) { ... } -> true[permalink][rdoc]
fatal(progname = nil) -> true

FATAL 情報を出力します。

ブロックを与えなかった場合は、progname をメッセージとしてログを出力します。

ブロックを与えた場合は、ブロックを評価した結果をメッセージとして ログを出力します。

引数とブロックを同時に与えた場合は、progname をプログラム名、ブロックを評価した 結果をメッセージとしてログを出力します。

[PARAM] progname:
ブロックを与えない場合は、メッセージとして文字列または例外オブジェクトを指定します。 ブロックを与えた場合は、プログラム名を文字列として与えます。


require 'logger'

logger = Logger.new(STDOUT)
logger.fatal("fatal1")               # => F, [2019-03-17T22:36:43.042422 #4028] FATAL -- : fatal1
logger.fatal("MainApp") { "fatal2" } # => F, [2019-03-17T22:36:43.042462 #4028] FATAL -- MainApp: fatal2

[SEE_ALSO] Logger#debug

fatal? -> bool[permalink][rdoc]

現在の Logger オブジェクトが FATAL 以上のログレベルのメッセージを記録するなら 真を返します。



require 'logger'

logger = Logger.new(STDOUT, level: Logger::Severity::FATAL)
logger.fatal? # => true
logger.level = 5
logger.fatal? # => false
formatter -> String[permalink][rdoc]

ログを出力する際に使用するフォーマッターを取得します。

このメソッドの返り値が持つ call メソッドは 4 つの引数 (severity, time, program name, message) を受けとります。

formatter=(formatter)[permalink][rdoc]

ログを出力する際に使用するフォーマッターをセットします。

[PARAM] formatter:
4 つの引数 (severity, time, program name, message) を受け取る call メソッドを 持つオブジェクトを指定します。call メソッドの返り値は文字列にしてください。
require 'logger'
logger = Logger.new
logger.formatter = proc{|severity, datetime, progname, message|
  "#{datetime}: #{message}\n"
}
info(progname = nil) { ... } -> true[permalink][rdoc]
info(progname = nil) -> true

INFO 情報を出力します。

ブロックを与えなかった場合は、progname をメッセージとしてログを出力します。

ブロックを与えた場合は、ブロックを評価した結果をメッセージとして ログを出力します。

引数とブロックを同時に与えた場合は、progname をプログラム名、ブロックを評価した 結果をメッセージとしてログを出力します。

[PARAM] progname:
ブロックを与えない場合は、メッセージとして文字列または例外オブジェクトを指定します。 ブロックを与えた場合は、プログラム名を文字列として与えます。


require 'logger'

logger = Logger.new(STDOUT)
logger.info("info1")               # => I, [2019-03-21T03:36:28.003418 #2533]  INFO -- : info1
logger.info("MainApp") { "info2" } # => I, [2019-03-21T03:36:28.003493 #2533]  INFO -- MainApp: info2

[SEE_ALSO] Logger#debug

info? -> bool[permalink][rdoc]

現在の Logger オブジェクトが INFO 以上のログレベルのメッセージを記録するなら 真を返します。



require 'logger'

logger = Logger.new(STDOUT)
logger.info? # => true
logger.level = Logger::Severity::ERROR
logger.info? # => false
level -> Integer[permalink][rdoc]
sev_threshold -> Integer

レシーバにセットされているログレベルを取得します。



require 'logger'

logger = Logger.new(STDOUT)
logger.level # => 0
logger.level = Logger::Severity::ERROR
logger.level # => 3
level=(level)[permalink][rdoc]
sev_threshold=(level)

Logger オブジェクトのログレベルを設定します。ログレベルがこれより低いメッセージは 出力されません。

[PARAM] level:
ログレベルを指定します。


require 'logger'

logger = Logger.new(STDOUT)
logger.level # => 0
logger.level = Logger::Severity::ERROR # => 3
logger.level # => 3
progname -> String[permalink][rdoc]

ログに出力するプログラム名を取得します。

progname=(name)[permalink][rdoc]

ログに出力するプログラム名を設定します。

unknown(progname = nil) { ... } -> true[permalink][rdoc]
unknown(progname = nil) -> true

UNKNOWN 情報を出力します。

ブロックを与えなかった場合は、progname をメッセージとしてログを出力します。

ブロックを与えた場合は、ブロックを評価した結果をメッセージとして ログを出力します。

引数とブロックを同時に与えた場合は、progname をプログラム名、ブロックを評価した 結果をメッセージとしてログを出力します。

[PARAM] progname:
ブロックを与えない場合は、メッセージとして文字列または例外オブジェクトを指定します。 ブロックを与えた場合は、プログラム名を文字列として与えます。


require 'logger'

logger = Logger.new(STDOUT)
logger.unknown("unknown1")              # => A, [2019-03-28T00:26:42.850942 #2765]   ANY -- : unknown1
logger.unknown("MyApp") { "unknown2" }  # => A, [2019-03-28T00:26:42.851021 #2765]   ANY -- MyApp: unknown2

[SEE_ALSO] Logger#debug

warn(progname = nil) { ... } -> true[permalink][rdoc]
warn(progname = nil) -> true

WARN 情報を出力します。

ブロックを与えなかった場合は、progname をメッセージとしてログを出力します。

ブロックを与えた場合は、ブロックを評価した結果をメッセージとして ログを出力します。

引数とブロックを同時に与えた場合は、progname をプログラム名、ブロックを評価した 結果をメッセージとしてログを出力します。

[PARAM] progname:
ブロックを与えない場合は、メッセージとして文字列または例外オブジェクトを指定します。 ブロックを与えた場合は、プログラム名を文字列として与えます。


require 'logger'

logger = Logger.new(STDOUT)
logger.warn("warn1")              # => W, [2019-03-27T22:46:17.744243 #12744]  WARN -- : warn1
logger.warn("MyApp") { "warn2" }  # => W, [2019-03-27T22:46:17.744322 #12744]  WARN -- MyApp: warn2
logger.level = Logger::Severity::ERROR
# 出力されない
logger.warn("warn3")

[SEE_ALSO] Logger#debug

warn? -> bool[permalink][rdoc]

現在の Logger オブジェクトが WARN 以上のログレベルのメッセージを記録するなら 真を返します。



require 'logger'

logger = Logger.new(STDOUT)
logger.warn? # => true
logger.level = Logger::Severity::ERROR
logger.warn? # => false

定数

ProgName -> String[permalink][rdoc]

ログファイル作成時に使うプログラム名。

SEV_LABEL -> Array[permalink][rdoc]

ログレベルのラベルを格納した配列。

VERSION -> String[permalink][rdoc]

このライブラリのバージョンを表す文字列。