ログファイル
エラーログ・デバッグログ等のログファイルについて説明します。
以下の項目のうち最初の項目を除いて、残りの項目はすべて YKLook のログファイルについての説明です。
YKLook用アプリをWebサーバ経由で起動したときのエラー情報は、そのWebサーバのログファイルに記録されています。
ログファイルの保存場所は、Webサーバごとに異なりますので、お使いのWebサーバの説明書等をご覧ください。
Webサーバが Apache の場合は、以下の場所のいずれかにログファイルを置いていることが多いです。
OS |
ログファイルの保存場所 |
UNIX (Mac OS X を含む) |
/var/log/httpd
/var/log/apache
/var/log/apache2
/usr/local/apache/logs
/usr/local/apache2/logs |
MS-Windows |
C:\Program Files\Apache Group\Apache\logs
C:\Program Files\Apache Group\Apache2\logs |
お使いの環境によっては、コンピュータの管理者(いわゆるルートユーザー)でないとログファイルを見れないことがあります。
そのときは管理者に相談してください。
Webサーバ経由で起動したときのエラーのうち、YKLook の処理開始前に発生したエラーについては
このWebサーバのログファイルを調べることしかできません。
YKLook の処理開始後に発生したエラーであれば、後述の YKLook のログファイルにエラー情報を記録していますので、Webサーバのログファイルが見れなくても大丈夫です。
また、YKLook の処理開始前に発生したエラーの多くは、
YKLook用アプリの最初の一歩 > Webアプリとして起動・終了
のチェック項目を確認することで解決できます。
YKLook が出力するエラー情報は、YKLook用のログファイルに記録しています。
このファイルのサイズは最大1MB(1メガバイト)で、バックアップ用のファイルも含めて最大2MB(2メガバイト)です。
このサイズを超える古い記録は順に破棄しますので、ファイルが無限に大きくなる心配はありません。
もちろん、ファイルの最大サイズを変更することもできます。
また、YKLook のスイープ機能により、日付けの古いログファイルは自動的に削除します。
次項およびそれ以降の項目で順に説明します。
以下はエラーログの出力例です。
[2009-01-02 12:34:56 - 789]----------------------------------------
log_btr[0] xxxx.rb:23:in `mmmm'
log_btr[1] xxxx.rb:45
ex_typ: ExceptionClassName
ex_msg: ExceptionMessage
ex_btr[0] xxxx.rb:67:in `ffff'
ex_btr[1] xxxx.rb:89
ex_info aaaaaa
ex_info bbbbbb
user_ex_typ: ExceptionClassName
user_ex_msg: ExceptionMessage
user_ex_btr[0] xxxx.rb:765:in `ffff'
user_ex_btr[1] xxxx.rb:432
user_ex_info cccccc
user_ex_info dddddd
Fixnum: 123
String: xyz
|
最初の行はこのログを出力した時刻とプロセスIDです。
log_btr
はこのログを出力したときのバックトレースです。
ex_typ
はこのログを出力した例外クラスの名前です。
ex_msg
はその例外クラスからのメッセージです。
ex_btr
はその例外が発生したときのバックトレースです。
ex_info
はその例外クラスの補助情報です。なければ出力しません。
ex_typ
が
YKLookErrorUser
のときは、先頭に
user_
の付いている情報も出力します。
それ以降の Fixnum や String など、データ型オブジェクトのクラス名で始まるものは補助情報です。
なければ出力しません。
この中で最も重要なのは、先頭に
user_
が付いたものです。
この情報があるときは、これがエラーの原因です。
もしそれがなければ
ex_typ
と
ex_msg
と
ex_btr
が重要です。
log_btr
はエラーログに関して言えば、重要ではありません。
ログファイルの保存場所やファイル名を、プログラムで指定することもできます。
次項およびそれ以降の項目をご覧ください。
この項では、デフォルトのログファイルの保存場所とファイル名の決定方法について説明します。
デフォルトのエラーログ出力用のディレクトリやファイル名を確認するプログラムを用意しています。
詳細は
環境設定 > YKLookの作業用ディレクトリ → ディレクトリを確認 をご覧ください。
ログファイルの保存場所は、以下の順番で決定しています(ファイルの名前については後述)。
(1) |
環境変数 YKLOOK_LOGPATH があれば、それを基準ディレクトリとし、(8)へ。 |
(2) |
環境変数 TEMP があれば、それを基準ディレクトリとし、(8)へ。 |
(3) |
環境変数 TMP があれば、それを基準ディレクトリとし、(8)へ。 |
(4) |
/var/tmp があれば、それを基準ディレクトリとし、(8)へ。 |
(5) |
/usr/tmp があれば、それを基準ディレクトリとし、(8)へ。 |
(6) |
/tmp があれば、それを基準ディレクトリとし、(8)へ。 |
(7) |
Ruby プログラムを起動したディレクトリを基準ディレクトリとし、(8)へ。 |
(8) |
基準ディレクトリ直下に yklooklog というディレクトリがなければ作る。
作れないときは、別の基準ディレクトリを探す。 |
(9) |
環境変数 YKLOOK_USER、USER、LOGNAME、USERNAME があるかをこの順番で調べ、最初に見つかったものについて、(8)の直下に
その名前でディレクトリを作り、これに決定。
環境変数がなければ、(8)をそのまま出力先のディレクトリに決定。 |
環境変数
YKLOOK_LOGPATH は、通常では未設定です。
プログラム製作者またはアプリ利用者が必要に応じて設定してください。
Webサーバの管理者が設定することもあります。
環境変数
TEMP と
TMP は、MS-Windows では
強制的に設定されていることがあります。
/var/tmp または
/usr/tmp または
/tmp は、
UNIX 系のOSではいずれかひとつは存在していますが、
安全のためWebアプリからは書き込み禁止になっていることもあります。
MS-Windows の場合はそれぞれ
\var\tmp または
\usr\tmp または
\tmp を意味しますが、通常は存在しません。
プログラム製作者またはアプリ利用者が必要に応じて設定してください。
環境変数
YKLOOK_USER は、通常では未設定です。
プログラム製作者またはアプリ利用者が必要に応じて設定してください。
Webサーバの管理者が設定することもあります。
この環境変数は、YKLook の作業用ディレクトリを決定するときにも影響します。
詳細は
環境設定 > YKLookの作業用ディレクトリ
をご覧ください。
環境変数
USER と
LOGNAME は
UNIX系のOSで設定されていることが多いです。
ただしWebサーバ経由で起動したときは、設定されないことも多いです。
環境変数
USERNAME は MS-Windows で設定されていることが多いです。
上記(1)から(7)までの基準ディレクトリのいずれもダメなときは、
ログファイルへのログの記録はせずに、標準エラー出力先にログを出力します。
このとき、Webサーバ経由で起動していた場合、この出力がエラーの原因になるかもしれません。
このログファイルの名前の部分は以下の順番で決定しています。
(1) |
もしブラウザ経由でWebアプリとして起動されているときは、
環境変数 REMOTE_ADDR の値をファイル名に決定。 |
(2) |
制御端末の名前が取得できれば、それをファイル名に決定。 |
(3) |
上記のいずれでもなければ、ファイル名を tty に決定。 |
Webアプリの場合は、常に環境変数
REMOTE_ADDR があるので、上記(1)で必ず決定します。
スタンドアロンの場合は(2)または(3)になります。
YKLook 内部では、
tty コマンドを使って制御端末の名前を取得しています。
このため、OSが UNIX 系の場合は上記(2)で決定することが多く、
MS-Windows の場合は上記(3)で決定することが多いです。
バックアップ用のログファイルの名前は、もとのファイル名に枝番「_1」を付けたものです。
ログファイルの保存場所については、前項でも説明しているように、環境変数
YKLOOK_LOGPATH や
YKLOOK_USER により指定する方法もあります。
環境変数を設定するには、プログラムを起動するよりも前に設定する方法と、プログラムの中で指定する方法とがあります。
プログラムを起動するよりも前に設定する方法はOS・Webサーバ等により異なり、それを説明するのは YKLook の範囲を超えますので、お使いの環境の説明書等をご覧ください。
プログラムの中で指定するときは
require
よりも前で指定してください。
#!/usr/bin/ruby -Ke
ENV['YKLOOK_LOGPATH'] = '/tmp/yklook'
require '/opt/yklook/swing'
... その他の処理 ...
|
任意のディレクトリ(この例では
/tmp/yklook )を指定する場合は、事前にそのディレクトリを作っておいてください。
以下は UNIX(Mac OS X を含む)でのディレクトリを作るコマンドの例です。
mkdir /tmp/yklook
chmod 777 /tmp/yklook
|
最後のコマンド
chmod により、そのディレクトリ内にはすべてのユーザがファイルを作れるようにアクセス権を設定しています。
複数のユーザで利用するときは、自分以外のユーザにもそのディレクトリへのアクセス権を設定する必要があります。
また、たとえ自分ひとりしか使ってないとしても、Webアプリとして利用するときは、Webサーバが独自のユーザIDを使って稼働していることが多いのでアクセス権が必要です。
他のOSをお使いの場合も、必要に応じてディレクトリのアクセス権を設定してください。
前項までのデフォルトの定義を無視して任意の保存場所、ファイル名、最大サイズ等を設定することもできます。
以下のプログラム例は、YKLook のエラーログ出力用のファイルの保存場所と最大サイズを変更しています。
YKLookLog.yk_log().yk_set_dirname( '/aaa/bbb/ccc' )
YKLookLog.yk_log().yk_set_sizelimit( 10 * 1024 * 1024 ) # 10MB
|
この2行は
YKLookMain.yk_mainloop()
を呼び出す前に実行するようにしてください。
できれば、
require
の後、クラスやメソッド定義の前がいいです。
#!/usr/bin/ruby -Ks
require '/opt/yklook/swing'
YKLookLog.yk_log().yk_set_dirname( '/aaa/bbb/ccc' )
YKLookLog.yk_log().yk_set_sizelimit( 10 * 1024 * 1024 ) # 10MB
class TestGUI < YKLookMain
... いろいろ ...
end
YKLookMain.yk_mainloop( TestGUI.new() )
|
任意のディレクトリ(この例では
/aaa/bbb/ccc )を指定する場合は、事前にそのディレクトリを作っておいてください。
以下は UNIX(Mac OS X を含む)でのディレクトリを作るコマンドの例です。
mkdir /aaa/bbb/ccc
chmod 777 /aaa/bbb/ccc
|
最後のコマンド
chmod により、そのディレクトリ内にはすべてのユーザがファイルを作れるようにアクセス権を設定しています。
複数のユーザで利用するときは、自分以外のユーザにもそのディレクトリへのアクセス権を設定する必要があります。
また、たとえ自分ひとりしか使ってないとしても、Webアプリとして利用するときは、Webサーバが独自のユーザIDを使って稼働していることが多いのでアクセス権が必要です。
他のOSをお使いの場合も、必要に応じてディレクトリのアクセス権を設定してください。
ディレクトリは現状のままで、ファイル名の部分だけを変更するには
yk_set_filename()
を使ってください。
ディレクトリとファイル名の両方を指定するには、以下の方法があります。
-
yk_set_dirname()
と
yk_set_filename()
を使う。
-
yk_set_fullpath()
を使う。
各メソッドの詳細については
クラス解説
YKLookLog
の下記メソッドの説明をご覧ください。
-
yk_log()
-
yk_set_dirname()
-
yk_set_filename()
-
yk_set_fullpath()
-
yk_set_sizelimit()
デバッグ時など、プログラムの任意の箇所からログファイルに出力するには
YKLookLog
クラスのメソッド
yk_print()
を使ってください。
このメソッドは、同じ名前で同じ機能のクラスメソッドとインスタンスメソッドがあります。
インスタンスメソッドについては次項をご覧ください。
クラスメソッドを使うと、YKLook のエラーログ出力用のファイルに出力します。
num = 123
ary = [ 456, 'xyz' ]
hash = { 'abc' => 789, 'def' => 'ghi' }
YKLookLog.yk_print( 'Here is', num, ary, hash )
|
上の例の出力は以下のようになります。
[2009-01-02 12:34:56 - 789]----------------------------------------
String: Here is
Fixnum: 123
Array [0] 456
Array [1] xyz
Hash [abc] 789
Hash [def] ghi
|
yk_print()
の詳細は
クラス解説
YKLookLog
の説明をご覧ください。
YKLook のエラーログ出力用のファイルとは別に、プログラム製作者が任意のログファイルを作ることができます。
例1 |
log = YKLookLog.new( '/tmp/debug/logfile' )
log.yk_print( 'Here is', hash, ary )
|
例2 |
log = YKLookLog.new()
log.yk_set_fullpath( '/tmp/debug/logfile' )
log.yk_print( 'Here is', hash, ary )
|
上の例は、ログファイル
/tmp/debug/logfile に出力しています。
このファイルのディレクトリ
/tmp/debug は、事前に作っておいてください。
以下は UNIX(Mac OS X を含む)でのディレクトリを作るコマンドの例です。
cd /tmp
mkdir debug
chmod 777 debug
|
最後のコマンド
chmod により、そのディレクトリ内にはすべてのユーザがファイルを作れるようにアクセス権を設定しています。
複数のユーザで利用するときは、自分以外のユーザにもそのディレクトリへのアクセス権を設定する必要があります。
また、たとえ自分ひとりしか使ってないとしても、Webアプリとして利用するときは、Webサーバが独自のユーザIDを使って稼働していることが多いのでアクセス権が必要です。
他のOSをお使いの場合も、必要に応じてディレクトリのアクセス権を設定してください。
YKLookLog.new()
の詳細は
クラス解説
YKLookLog
の説明をご覧ください。
YKLook のスイープ機能により、日付けの古いログファイルを自動的に削除します。
削除する条件を調節できます。
詳細は
スイープ処理 の説明をご覧ください。
Copyright (c) 2003-2010 YorozuKotowariYa Ltd.