この記事は4分30秒で読めます。

みなさん、はじめまして。
EC-CUBERの波多野と申します。

▼EC-CUBERは、総合的なECソリューションをご提供するEC-CUBEのプロフェッショナル集団です!
https://ec-cuber.jp/service/
▼関連:EC-CUBEとは?
https://ec-cuber.jp/about/

開発中や、不具合の原因調査等の際に役に立つのが、ログです。
特に、変数の内容表示や、問題の発生時刻やその時の状況の調査、そもそも今見ている箇所に処理が通っているのかの確認等、用途は枚挙にいとまがありません。

今回は、EC-CUBE 2系でのログ出力についてお話したいと思います。
(3系、4系についても機会があればお話したいと思いますが、2系とは大きく異なりますのでご注意ください)

▼関連記事:ログ出力について(EC-CUBE3系、4系)
https://ec-cuber.jp/news-column/column14/

まず、内容の確認自体は管理画面の システム設定>EC-CUBE ログ表示 から可能です。
しかし、内容が膨大になるとブラウザ上での検索等には無理がある他、少なくとも自分で開発を行う際には、ログ出力に使用する関数について知っておくことは不可欠です。

次に、 data/class/util/GC_Utils.php をご覧ください。
ここに定義されている、gfDebugLoggfPrintLog がログ出力に利用できる関数です。
名前の通り、 gfDebugLog はデバッグ用途のログ出力を行う関数ですので、プログラム中で使われているのはほとんどが gfPrintLog になります。

ここで、gfPrintLog 関数内で実際にログ出力する内容を生成している部分を見てみましょう。

$msg = "$today [{$_SERVER['SCRIPT_NAME']}] $msg from {$_SERVER['REMOTE_ADDR']}\n"; 

上記より、出力される内容は、

  • 日時
  • スクリプトファイル名(例:/shopping/confirm.php  )
  • メッセージ(例:order complete. )
  • アクセス元のIPアドレス

であることがわかります。
ここでパラメーター設定画面にて USE_VERBOSE_LOG を true に設定している場合、この後にログイン情報、スタックトレースの情報が追加されます。

if ($verbose) {
    if (GC_Utils_Ex::isFrontFunction()) {
        $msg .= 'customer_id = ' . $_SESSION['customer']['customer_id'] . "\n";
    }
    if (GC_Utils_Ex::isAdminFunction()) {
        $msg .= 'login_id = ' . $_SESSION['login_id'] . '(' . $_SESSION['authority'] . ')' . '[' . substr(sha1(session_id()), 0, 8) . ']' . "\n";
    }
    $msg .= GC_Utils_Ex::toStringBacktrace(GC_Utils_Ex::getDebugBacktrace());
}

最後にログ出力、ログローテーションが行われます。

ログの出力先は、 {EC-CUBEディレクトリ}/data/logs/ 配下です。
以下の通り、管理画面で表示可能なログと対応しています。

  • 標準ログファイル: site.log
  • 会員ログインログファイル: customer.log
  • 管理機能ログファイル: admin.log
  • エラーログファイル: error.log
  • DBログファイル: db.log
  • プラグインログファイル: plugin.log

(※ パラメーター設定画面からログファイル関連の設定を変更していると、出力先は変わります)
例えば、 site.log には受注完了時に以下のような内容のログが出力されます。ログの内容から、受注ID、注文を行ったお客様の顧客IDがわかります。

2020/05/19 18:30:01 [/shopping/confirm.php] order complete. order_id=25 from 192.168.0.1
customer_id = 63
/var/www/ec-cube2/html/shopping/confirm.php(18): LC_Page_Shopping_Confirm_Ex->process
/var/www/ec-cube2/data/class_extends/page_extends/shopping/LC_Page_Shopping_Confirm_Ex.php(43): LC_Page_Shopping_Confirm->process
/var/www/ec-cube2/data/class/pages/shopping/LC_Page_Shopping_Confirm.php(52): LC_Page_Shopping_Confirm->action
/var/www/ec-cube2/data/class/pages/shopping/LC_Page_Shopping_Confirm.php(201): SC_Helper_Purchase->completeOrder
/var/www/ec-cube2/data/class/helper/SC_Helper_Purchase.php(113): 

余談ですが、log とは英語で「丸太」を意味します。 

ログハウスのログです。この呼び方は、航海の際に船の速度を測定するために縄を括りつけて海に浮かべた丸太(log)、また測定結果を記録する航海日誌(logbook)に由来します。

出典: デジタル大辞泉(goo国語辞書)  

https://dictionary.goo.ne.jp/word/%E3%83%AD%E3%82%B0/#jn-236384

開発、調査等の際に少しでもお役に立てば幸いです。

以上、最後までお読み頂きありがとうございました。

EC-CUBEのことなら、弊社に何でもご相談・お任せください!
▼問合せフォームから相談してみる。
https://ec-cuber.jp/contact-us/
▼電話で相談してみる。
03-6386-3652