Blogブログ

ログ出力について Part1

こんにちは。HappyLifeCreatorsサポート担当の大谷です。

PHP始めました。

と、この季節、飲食店の看板によくありそうなワードですが、そうなんです、始めたんです。始まってしまいました。おっさん、PHP始めたのです。

というわけで、唐突ですが、スーパー初心者プログラマーの実体験を当ブログに記させていただこうかと思います!

まずテーマですが、コチラです。

ログ出力

なぜログ出力なのか、最近とある事がありました。

あるシステムにて、ありえないはずのデータが保存された。
当然、該当箇所の調査を行います。しかし、何度テストしても再現しない。
うーん困った・・・。
プログラマーの皆さんなら1度は経験された事がありそうな内容です。

ならば、より詳細な情報で調査できるように作るしかない!
といった成り行きで初心者が作ってみました。

今回のログ出力機能追加の目的は「再現の為に必要な情報を記録する事」です。

では目的達成の為にはどのようなログを取ればいいか。

出力する要素等は以下のように定めました。

1. 時間
2. 箇所(関数名)
3. 関数実行時のパラメータの値
4. 戻り値

では実際に書いてみます

今回は関数 hogehoge の実行時パラメータと戻り値を時系列で記録するため、
以下のように上下に挟み込むように記述しました。


$params1 = 1;
$params2 = 2;
$params3 = 3;

error_log("\n" . date("[Y/m/d H:i:s] ") . "▼hogehoge" . "\n"
. "params1 = " . $params1 . "\n"
. "params2 = " . $params2 . "\n"
. "params3 = " . $params3 . "\n"
,3,"/var/log/hogehoge_log.txt");

$return_value = hogehoge($params1, $params2, $params3);

error_log("\n" . "return_value = " . $return_value . "\n"
. date("[Y/m/d H:i:s] ") . "▲hogehoge" . "\n\n"
,3,"/var/log/hogehoge_log.txt");

$return_valueの値が10を返された場合、
実行結果は以下のようになります。

(実行結果)————————————————-
[2021/06/30 16:02:49] hogehoge
params1 = 1
params2 = 2
params3 = 3

return_value = 10
[2021/06/30 16:02:49] hogehoge
———————————————————–

若干見づらい・・・。
見やすくするためちょっと変更してみます。

 

$params1 = 1
$params2 = 2
$params3 = 3

error_log("\n" . date("[Y/m/d H:i:s] ") . "▼hogehoge" . "\n"
. "\t" . "params1 = " . $params1 . "\n"
. "\t" . "params2 = " . $params2 . "\n"
. "\t" . "params3 = " . $params3 . "\n"
,3,"/var/log/hogehoge_log.txt");

$return_value = hogehoge($params1, $params2, $params3);

error_log("\n\t" . "return_value = " . $return_value . "\n"
. date("[Y/m/d H:i:s] ") . "▲hogehoge" . "\n\n"
,3,"/var/log/hogehoge_log.txt");

(実行結果)————————————————-
[2021/06/30 16:02:49] ▼hogehoge
params1 = 1
params2 = 2
params3 = 3

return_value = 10
[2021/06/30 16:02:49] ▲hogehoge
———————————————————–

少し見やすくなりました。

error_log関数についてはデバッグの際に多用していましたが、どちらかというと単発的な使用が多く、継続的な記録を目的として利用するのは初めてでした。
ログとして残した物を見る場合、まずは情報として何が必要か、そして見やすく記録するにはどうするか。

まだまだとっかかりに過ぎないので改良の余地はたくさんありそうですが、
今日の所はこのあたりで終わりにします。

ありがとうございました。

大谷

執筆者

Developer

大谷