- PR -

ログの頻度について

投稿者投稿内容
Samiadon
会議室デビュー日: 2003/10/08
投稿数: 16
お住まい・勤務地: 東京都神戸市浪速区猿猴橋町三条下ル
投稿日時: 2003-12-01 18:05
漠然とした質問で申し訳ないのですが、

ログの出力レベルを ERROR にした状態で、
出力レベル debug にて情報をログ出力するコードを書くと、
どのくらいパフォーマンスに影響が出てしまうものなのでしょうか。

現在、前任者の作ったソースとにらめっこ中なのですが、
至る所にdebugログが挿入されておりまして、全部削除する労力と
パフォーマンスのどちらを取るかで揺れております。

0.1〜6分/件の、600件/日程度の処理で、且つ直接お金が
絡むものではない為、「少しでも処理は早いほうがいいよね」という
程度のものなのですが、皆さんはどうなのでしょうか?
やはりdebugログは最終的に削除されていますか?
なべぞう
ベテラン
会議室デビュー日: 2003/07/07
投稿数: 98
お住まい・勤務地: 岡山県
投稿日時: 2003-12-01 18:11
引用:

Samiadonさんの書き込み (2003-12-01 18:05) より:
現在、前任者の作ったソースとにらめっこ中なのですが、
至る所にdebugログが挿入されておりまして、全部削除する労力と
パフォーマンスのどちらを取るかで揺れております。



私が経験したプロジェクトでは出力するか否かの設定を起動時に
読み取るようにしていました。システム導入後、半年ほどはログ
を出力しながら運用していたと記憶しています。ちなみに出す、
出さないでの性能差は把握しておりません。
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2003-12-01 18:23
これは、Log4jの話なのですかね?
追記:Log4jの場合だと仮定して(っていうのが抜けてました。)
俺の場合には、debugログは一応残してあります。
ただ、
コード:

if(LOGGER.isDebugEnabled())
{
LOGGER.debug("hogehoge");
}


という風にしてます。
これだと、if文の判定には時間が掛からないと、
Log4jの作成した偉い人(笑)が言ってたと思います。
上記のようにしているのであれば、コストをかけて削除してもほとんど変わらないので、
残したままのほうがいいと思います。



_________________
_/_/_/
_/うちの会社の変なところ〜
_/1条.毎年300人新卒採用
_/2条.大事な事項(就業規則等)の変更発表は、施行前日
_/(以下略)

[ メッセージ編集済み 編集者: アティ 編集日時 2003-12-02 08:52 ]
乳牛
常連さん
会議室デビュー日: 2003/04/15
投稿数: 22
投稿日時: 2003-12-01 22:24
勝手にLOG4Jだと思い込んでいますが、そういうことにならない為のLOG4Jでは?
ログの必要なくなったカテゴリは設定ファイルでチョチョイノチョイって。
System.out.printlnだったら・・・ご愁傷様です。手作業ですね。
Samiadon
会議室デビュー日: 2003/10/08
投稿数: 16
お住まい・勤務地: 東京都神戸市浪速区猿猴橋町三条下ル
投稿日時: 2003-12-02 08:45
すみません。基本的な情報を書き忘れてました!

コードを見る限りでは、
最初にコーディングされた方はLog4jを使っている
次に機能追加と修正された方は、System.out.println()を使用して、
その後コメント化している。
その後の方たちが、データの流れを追うためにSystem.out.println()を
あちこちに挿入して、そのまま残っている。

という状態です。
System.out.println()は当初から削除対象でしたが、
皆さんのご回答からするとLog4jのほうは残しておいても構わない
ということでしょうか?

"System.out.println"で検索したら3パッケージ64ファイルでした。
とりあえず地道に潰していきます。。。(o_ _)o

ご回答、大変に感謝します。ありがとうございました。
masaka
常連さん
会議室デビュー日: 2003/08/04
投稿数: 27
お住まい・勤務地: 東京
投稿日時: 2003-12-02 09:41
Log4JのisDebugEnabled()の使い方に関して、簡単に補足をしておきます。
引用:

コード:

if(LOGGER.isDebugEnabled())
{
LOGGER.debug("hogehoge");
}


という風にしてます。
これだと、if文の判定には時間が掛からないと、
Log4jの作成した偉い人(笑)が言ってたと思います。



Log4Jのソースコードを見てもらえばわかると思いますが、isDebugEnabled()を使うとif文の判定に時間がかからなくなる、ということにはなりません。その代わり、もっといいことがあります。debug()メソッドの引数として渡されている文字列("hogehoge")の生成を抑止することが出来ます。(本番運用時にはdebug()メソッドの実行位置に到達しないため)
debug()メソッドの使用箇所はプロジェクトによっては何百、何千といった数になると思います。そのとき、そこで生成されるログ出力文字列の生成を抑えることが出来るということは大きなメリットです。

Samiadonさんの質問に関しては、Log4Jがdebugレベルのログを出力するか否かの判定をする処理には大して処理コストがかからないので、isDebugEnabled()メソッドを使っているならそのままdebug()メソッドを残しておいた方がいいと思います。

[ メッセージ編集済み 編集者: masaka 編集日時 2003-12-02 09:55 ]

[ メッセージ編集済み 編集者: masaka 編集日時 2003-12-02 12:55 ]
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2003-12-02 10:16
引用:

Samiadonさんの書き込み (2003-12-02 08:45) より:
"System.out.println"で検索したら3パッケージ64ファイルでした。
とりあえず地道に潰していきます。。。(o_ _)o


"System.err.println"もお忘れなく...。
あとprintも
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2003-12-02 11:11
masakaさん、補足説明ありがとうございます。
言われて調べてみました。
なるほど、2回判定することによるDEBUGでの速度低下を犠牲にして、
本番環境での、パラメータ生成コストをなくすることによる速度の向上を図るということなんですね。
ちゃんと調べないとだめですね
勉強になりましたm(_ _)m
引用:

masakaさんの書き込み (2003-12-02 09:41) より:
(省略)
Log4Jのソースコードを見てもらえばわかると思いますが、isDebugEnabled()を使うとif文の判定に時間がかからなくなる、ということにはなりません。その代わり、もっといいことがあります。debug()メソッドの引数として渡されている文字列("hogehoge")の生成を抑止することが出来ます。
debug()メソッドの使用箇所はプロジェクトによっては何百、何万といった数になると思います。そのとき、そこで生成されるログ出力文字列の生成を抑えることが出来るということは大きなメリットです。
(省略)


_________________
_/_/_/
_/うちの会社の変なところ〜
_/1条.毎年300人新卒採用
_/2条.大事な事項(就業規則等)の変更発表は、施行前日
_/(以下略)

スキルアップ/キャリアアップ(JOB@IT)