ロジパラさんを目指してた!

はてな日記で書いてた頃の冗談日記

ログ(2)-ログフォルダの構成

ログフォルダの構成:/hoge/log_hoge/削除年月日/大項目/作成Ym/作成日(d)/作成時(H)/ログID.txt

スクリプトの性格、状況によってフォルダの構成は変更になるかもしれないが /hoge/log_hoge/削除年月日/ は必須。

  • スクリプトは大項目(大メニュー)-中項目(カテゴリごとのメニュー)-小項目(各画面)で構成されるが(※例)その大項目で区切ってログを生成する。中項目、小項目は一つのログにまとめる。中項目、小項目まで区切ると管理が煩雑になり、ログを調査するときに使いにくくなる。
  • 大項目のトップで作成されたログのフルパスをセッション等で保持しておき、作業が大項目を抜けるまでそのログIDを使用する*1
  • ログID.txtは"分秒_乱数"(($szLogId=date(is)."_".rand()))で作ると調査しやすい
  • フォルダは作成Ym/作成日(d)d/作成時(H)で作成するとファイル内検索*2をしやすい。
  • セキュリティ上、ログフォルダ(log_hoge)のルート名は変更のこと。
  • ログはもちろん cron で削除のこと。sh でさくっと作れるんじゃないかな
  • ログフォルダ、ログファイルは作成、書き込みをしたらフル権限*3にすること

利点

  • 削除年月日フォルダによりログの正確に関わらず削除できる。もしAの処理のログの生存日数は10日、Bの処理のログの生存日数は20日など処理によって保存日数が違う場合、各処理に沿ってログ削除スクリプトを書くことになる。すると新規にCの処理を開発したときに設定を忘れると永遠にサーバの容量を食うことになってしまう。
  • フォルダの上流で削除ログを確認できるため、複雑なチェックをすることなく削除ができる。各フォルダとファイルの作成日時をチェックして*4削除することになる。大量にログファイルができるようになると、それらを全てチェックすることになるので時間がかかりサーバに負荷がかかるようになってしまう。

欠点

  • 一番上が大項目別になっていないためチェックする時に見づらい形になっている。例えばaaaa年bb月cc日のAの処理のログが見たい場合、ログがどのフォルダにあるかわかりずらい。→/hoge/log_hoge/削除年月日/大項目/ を取得できる関数を作成する。
  • 最初に 削除年月日 で生成されているため、スレッドが切れてセッションが切れてしまったらログファイルのフルパスがわからなくなってしまい、連携のない別個のファイルを作ることになるため、ログが追いにくくなることがある。 ex)一つの注文に対して最初の処理(a)を行い、他の部署の作業があり、数日後に続きの作業(b)が発生すると、(a)と(b)で別々のログファイルを作ることになる。

(※例)

ex)注文の項目

┌(大項目)スタンダード注文。

│  ├(中項目)商品1

│  │  ├(小項目)商品に書き込む文字を選択

│  │  ├(小項目)数量選択

│  │  └(小項目)お届け先入力

│  └(中項目)商品2

│     ├(小項目)数量選択

│     └(小項目)お届け先入力

└(大項目)オーダーメイド注文

   ├(中項目)商品1

   │  ├(小項目)A,Bパーツに対するデータを入力

   │  ├(小項目)商品に書き込む文字を選択

   │  ├(小項目)数量選択

   │  └(小項目)お届け先入力

   └(中項目)商品2

      ├(小項目)C,Dパーツに対するデータを入力

      ├(小項目)数量選択

      └(小項目)お届け先入力

ログ管理クラス

関数名:ログフォルダやファイルの指定と生成

引数

  • 大項目名

返り値

  文字列:ログファイルのフルパス

  0   :エラー

出力

 ログフォルダ生成と生成フォルダのフル権限可

処理内容

1.ライブラリから大項目に対する保存日数を取得

2.本日+保存日数で削除日時を決定

3.ログIDを生成

4./hoge/log_hoge/削除年月日/大項目/作成Ym/作成日(d)/作成時(H)/ を掘る

5./hoge/log_hoge/削除年月日/大項目/作成Ym/作成日(d)/作成時(H)/ログID.txtに"スタート"と書き込む

6./hoge/log_hoge/削除年月日/大項目/作成Ym/作成日(d)/作成時(H)/ログID.txtを返す。

  ※エラーの場合、メンバ変数にエラーメッセージを入れて 0 を返す。

 

関数名:ログの置き場所取得

引数

  • 大項目名

返り値

  文字列:ログファイルのフルパス

  0   :エラー

出力

  • なし

処理内容

1.ライブラリから大項目に対する保存日数を取得

2.引数”年”が0の場合,今年を取得

3.引数”月”が0の場合,今月を取得

4.引数”日”が0の場合,今日を取得

5.上記年月日と保存日数から削除日時を算出

6."/hoge/log_hoge/削除年月日/大項目/年月/日d/" 文字列を返す

  ※エラーの場合、メンバ変数にエラーメッセージを入れて 0 を返す。

ログIDを生成

/hoge/log_hoge/削除年月日/大項目/年月/日(d)/作成時(H)/ を掘る

/hoge/log_hoge/削除年月日/大項目/作成Ym/作成日(d)/作成時(H)/ログID.txtに"スタート"と書き込む

/hoge/log_hoge/削除年月日/大項目/作成Ym/作成日(d)/作成時(H)/ログID.txtを返す。

  ※エラーの場合、メンバ変数にエラーメッセージを入れて 0 を返す。

 

関数名:エラーメッセージ

引数

  • なし

返り値

  文字列:メンバ変数(エラーメッセージ)

出力

  • なし

処理内容

  メンバ変数(エラーメッセージ)を返す。

*1:大メニューの一つをクリックしたらログIDを生成する。新たに大メニューから一つをクリックするまでそのログIDを使用すること

*2grep

*3:0777

*4:find ログフォルダ -citme +保存日数