Definitions
- ログを書き込むファイル名を
ログファイル
と表記することがあります。- ログファイルに書き込む内容(
#w(message)
のmessage
の部分)をログ
と表記することがあります。
Jump quickly
SimpleRotate
クラスはSingleton
パターンで実装されています。 従って返却するオブジェクトは唯一のSimpleRotate
オブジェクトです。initilize
メソッドがprivate
になりオブジェクトからのアクセスはできないためnew
メソッドを使うとエラーなります。
Returns
SimpleRotate
オブジェクトを返します。
ログの取り方に関する設定をします。
ここで設定した内容は、後に
SimpleRotate::instance
で返されるオブジェクトも保持し続けます。返り値はself
です。
Returns
SimpleRotate
オブジェクトを返します。
Parameters
file_name = File.absolute_path($0+".log")
ログを書き込むファイル名を
String
かSymbol
で指定します。デフォルトは./実行ファイル名.log
です。フルパス、もしくは相対パスで指定します。 相対パスの場合は、実行ファイルが起点になります。指定したファイルが存在しない場合はこのタイミングでファイルが生成されます。
ファイルの1行目はローテーションに関する情報です。この行は消さないでください。
ここで指定したファイルと同じファイルが存在する場合、そのファイルに追加書き込みします。ファイルではなく標準出力のみに出力したい場合はシンボルで
:STDOUT
と指定します。
limit = "100M"
ログファイルの最大サイズを
Integer
もしくは"1G"
等の文字列で指定します。"K", "M", "G"
が認識されます。デフォルトは"100M"
です。 例えばSimpleRotate.init("/var/log/ruby/app/foo.log", "500M")
と指定すると 500MB までファイルにログを書き込みます。
500MB
と書いてはいけません。認識するのは末尾の"K", "M", "G"
だけです。それ以外の文字列はto_i
によって排除されます。従って500MB
と書いたときは500
バイトと認識されます。
init
メソッド、w
メソッドでログファイルのサイズを評価し ここで指定した設定値を超えていた場合、次のファイルに書き込みます。
その際、古いファイルはfile_name.1
,file_name.2
,file_name.3
,file_name.4
のようにリネームされ、古いログファイルほど古い数字が記されることになります。
また、
"DAILY"
,"WEEKLY"
,"MONTHLY"
を指定することでファイルの容量でなく一定の期日ごとにローテーションする事も可能です。 その場合は、それぞれログを書き込んだファイルの作成日を起点に1日毎
,7日毎
,30日毎
に次のファイルに書き込みされます。 次のファイルにログを書き込む際に古いファイル名はfile_name.YYYYmmdd
というフォーマットでリネームされます。
generation=0
古いログファイルの最大数を指定します。古いログファイルはここで指定した数で世代交代します。
例えば
generation
に4
を設定すると、古いログファイルはfile_name.1
,file_name.2
,file_name.3
,file_name.4
の 4世代まで作られます。 この場合、新しいログファイルを入れると最大 5つのファイルでローテーションします。
値を
0
に設定すると世代交代は行わません。デフォルトは0
ですので世代交代は行われません。
ブロック付きでコールする事もできます。ブロックを抜けると自動でログファイルの I/O ポートを閉じます。
For Example
ログを標準出力(STDOUT)にも出すようにします。
Returns
返り値はありません。
nil
を返します。
ローテーションする際に古いログファイルを gzip 圧縮します。
zlib
を読み込みます。デフォルトは圧縮は行いません。init
メソッドでログファイルのローテーションが行われる可能性がある為init
メソッドの前に行うべきです。
Returns
返り値はありません。
nil
を返します。
古いログファイルを圧縮する際の圧縮レベルを指定します。数字が高い方が圧縮度が高くなります。デフォルトの圧縮レベルは
Zlib::DEFAULT_COMPRESSION
です。 このメソッドを呼び出すとログファイルの圧縮が有効に切り替わります。
Returns
返り値はありません。
nil
を返します。
Parameters
lelvel
圧縮レベルを
0-9
までのInteger
で指定します。
パラメータ
log_message
をログファイルに書き込みます。
ここでログファイルに書き込むログは必ず深刻度(ログレベル)の情報を持ちます。 直近に実行したログレベルを決めるメソッド(
#debug
,#info
,#warn
,#error
,#fatal
)でログレベルは決まります。 一度ログレベルを決めたあとはログレベルの情報は保持され続けます。 ログレベルを決めるメソッドが一度も実行されてないオブジェクトはINFO
をログレベルに持ちます。
Returns
引数で指定した
log_message
を返します。
Parameters
log_message
ログファイルに出力するログを指定します。
string
でなくてもinteger
やfloat
でも構いません。array
を指定する事も可能です。
For Example
下記のようにログファイルに出力されます。
#w
のエイリアスです。
For Example
#w
を呼び出した後 I/Oポートの内部バッファをフラッシュします。
Returns
返り値はありません。
nil
を返します。
#w
を呼び出した後 I/Oポートの内部バッファをフラッシュしません。デフォルトはこの挙動です。
Returns
返り値はありません。
nil
を返します。
ログファイルの I/Oポートを閉じます。
Returns
#init
のパラメータfile_name
に:STDOUT
を指定した場合はnil
を返します。それ以外はtrue
を返します。
閉じたログファイルの I/Oポートを開きます。
Returns
ログを記録するファイルの
File class
のオブジェクトを返します。
#init
のパラメータfile_name
に:STDOUT
を指定した場合はnil
を返します。また、I/Oポートを閉じていない時に呼び出すと WARNINGメッセージを出しnil
を返します。
新しくファイルを生成し、今後はそのファイルにログを書き込むようにします。 ファイルサイズが
limit
に満たないファイルをローテーションしたい時に使います。
Returns
#init
のパラメータlimit
に"DAILY"
や"WEEKLY"
などのファイルサイズ以外のものを指定した場合はローテーションせずnil
を返します。#init
のパラメータfile_name
に:STDOUT
を指定した場合も同様にnil
を返します。
全てのログは
"DEBUG" > "INFO" > "WARN" > "ERROR" > "FATAL"
までのログレベルを持ちます。左から右にかけてログの深刻度は増していきます。 ここで指定するのはどのログレベル以降のログをログファイルに出力するかです。
例えば、
ERROR
を閾値に指定するとERROR
もしくはそれ以上のログレベルを持つFATAL
をログだけがログファイルに出力されるようになります。
Returns
現在値を
string
で返します。
Parameters
log_lelvel
DEBUG
,INFO
,WARN
,ERROR
,FATAL
のいずれかをstring
で指定します。デフォルトはINFO
です。
For Example
ファイルにログを出力する際のフォーマットを指定します。デフォルトの
format
の値は"[$DATE] - $LEVEL : $LOG"
です。
Returns
現在値を
string
で返します。
Parameters
format
string
で指定します。フォーマットで使用できる定数は以下です。
- $DATE - 日付です。日付のフォーマットは #date_format で定義できます。
- $PID - プログラムのプロセスIDです。
- $LEVEL - ログのレベルです。
- $LOG - ログすなわち #w(message) の message です。
- $FILE - 現在実行中の Ruby スクリプトのファイル名(ファイル名のみ)です。
- $FILE-FUL - 現在実行中の Ruby スクリプトのファイル名(絶対パス)です。
For Example
下記のようにログファイルに出力されます。
For Example
下記のようにログファイルに出力されます。
ログをファイルに出力する時の $DATE のフォーマットを指定します。 デフォルトは
"%Y/%m/%d %H:%M:%S"
ですので日付のフォーマットは2013/10/04 20:04:59
のようになります。
Returns
現在値を
string
で返します。
Parameters
format
string
で指定します。format
の書式はDate#strftime(format)
の引数と同様です。
For Example
下記のようにログファイルに出力されます。
Returns
現在値を
string
で返します。
Parameters
format
新しくログファイルを作る際に古いログファイルはリネームされます。ファイル名は
file_name.1
やfile_name.20131024
のような命名規則でリネームされます。 この古いファイル名の.
の部分をformat
で指定する任意のstring
に変更できます。デフォルトは.
です。
For Example
この場合ローテーションする際に
app.log.example.1
というファイル名でリネームされます。
次のログファイルを作成するべきかどうかの判断は
#w
か#init
で行われます。
このメソッドをコールすると
#w
実行時にローテーションを行うべきかチェックを行いません。従って#w
の実行によってファイルのローテーションは行われません。
Returns
返り値はありません。
nil
を返します。
ログファイルがI/Oポートが閉じているかどうかを調べます。
Returns
ログファイルのI/Oポートが開いているときは
true
、それ以外でfalse
を返します。 なお、#init
のパラメータfile_name
に:STDOUT
を指定した場合はnil
を返します。
WARNINGメッセージを出力しないようにします。 WARNINGメッセージとは
SimpleRotate
クラス内部で予期せぬ状況が発生した時に標準エラー出力に吐かれる[WARNING] File is already open! - (SimpleRotate::Error)
のようなメッセージです。
Returns
返り値はありません。
nil
を返します。
ログレベルを
DEBUG
にします。DEBUG
はデバッグ用のログです。
Returns
SimpleRotate
オブジェクトを返します。従ってそのままメソッドチェインで#w
につなぐことができます。
ログレベルを
INFO
にします。INFO
はプログラム上のある特定の情報を知らせるログです。
Returns
SimpleRotate
オブジェクトを返します。従ってそのままメソッドチェインで#w
につなぐことができます。
ログレベルを
WARN
にします。WARN
は深刻なエラーではありませんが警告を促すログです。
Returns
SimpleRotate
オブジェクトを返します。従ってそのままメソッドチェインで#w
につなぐことができます。
ログレベルを
ERROR
にします。ERROR
はエラーを知らせるログです。
Returns
SimpleRotate
オブジェクトを返します。従ってそのままメソッドチェインで#w
につなぐことができます。
ログレベルを
FATAL
にします。FATAL
はプログラムが停止するような致命的なログです。
Returns
SimpleRotate
オブジェクトを返します。従ってそのままメソッドチェインで#w
につなぐことができます。
For Example
以下のようにログファイルに書き込まれます。
ログファイルのローテーションが完了したあと停止する時間を秒で指定します。これはマルチスレッド、マルチプロセスの際に重要です。 シングルで動かす場合は特に呼び出す意味はありません。この値は
#psync
のパラメータでも指定可能です。
もし複数のスレッドやプロセスが同時にローテーションを行ってしまう場合はこの値を大きくしてみてください。 実際にリネームが行われるまでのオーバーヘッドを考慮しての事です。
Returns
現在値を
float
もしくはfixnum
で返します。
Parameters
sec
float
もしくはfixnum
で指定します。デフォルトは0.1
です。#psync
をコールしてない場合は0
です。
プロセス間でクリティカルセクションを排他制御し、複数のプロセスによる実行でも安全にロギングできるようにします。
#init
にクリティカルセクションがある為#init
の前に行うべきです。 書き込みの際に inode番号を調べ常に新しいファイルに書き込みできるように同期を試みます。また、書き込みのあと I/Oポートの内部バッファをフラッシュします。
このメソッドをコールすると排他制御用の一時ファイルが生成されます。 一時ファイルは
.SimpleRotate_tempfile_【プログラムのファイル名】
という命名規則でログファイルと同じディレクトリに生成され、Ruby の終了処理で削除されるようにスケジューリングされます。 一時ファイル生成の際に既に同じ名前のファイルが存在する場合や終了処理で一時ファイルが空でない場合や削除するパーミッションがない場合は一時ファイルの削除は実行されません。 通常起こり得ませんがロック取得時に予期しないエラーが起きると3回まで再びロック取得を試みます。3度目が失敗するとロックを取得しないで処理を行います。
Returns
返り値はありません。
nil
を返します。
Parameters
sec
ログファイルのローテーションが完了したあと停止する時間を秒で指定します。
float
もしくはfixnum
で指定します。デフォルトは0.1
です。
For Example
現在開いているファイルの inode番号と
#init
のfile_name
で指定したファイルの inode番号を比較し差異を確認した場合file_name
で指定したファイルを開き直します。これは#w
呼び出し時に自動で行われるのであまり意識して呼び出すメソッドではありません。
Returns
inode番号に差異があった場合やなんらかの原因で inode番号を取得できない場合は最大で 3回開き直し、それでも inode番号が一致しなければ WARNINGメッセージを出力し
false
を返します。 ログファイルが正常に開けていない場合や#init
のfile_name
に:STDOUT
を指定している場合はnil
を返します。 それ以外ではtrue
を返します。
現在開いているファイルの inode番号と
#init
のfile_name
で指定したファイルの inode番号を比較しません。 シングルスレッド、シングルプロセス時に使用すべきです。
Returns
返り値はありません。
nil
を返します。
SimpleRotate
クラスが使用している標準添付ライブラリです。
singleton
monitor
zlib
SimpleRotate::Error
SimpleRotate
クラス内での例外を取り扱う内部クラスです。 基本的にSimpleRotate
クラス内部で発生し得るエラーはこの例外です。
SimpleRotate::ProcessSync
プロセス間で安全にロギングするための機能を提供する内部クラスです。
SimpleRotate::ProcessSyncMixin
をMix-in
しています。
SimpleRotate
クラス内で使用している内部モジュールです。
SimpleRotate::LogLevel
SimpleRotate::RotateTerm
SimpleRotate::ProcessSyncMixin
SimpleRotate::Validator