明示的にメソッドを呼び出してログを記録する方法をご説明します。
特定のコントローラー内で以下のように記述します:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Payment extends CI_Controller
{
public function index()
{
// アクセスログを記録
$this->_log_access();
// 通常の処理
// ...
}
public function complete()
{
// アクセスログを記録
$this->_log_access();
// 通常の処理
// ...
}
/**
* アクセスログを記録
*/
private function _log_access()
{
// 必要な情報を取得
$url = $this->uri->uri_string();
$full_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$ip = $this->input->ip_address();
$datetime = date('Y-m-d H:i:s');
$method = $this->input->method(); // GET, POST, etc.
// POSTデータも記録する場合(パスワードなどは除外推奨)
$post_data = $this->input->post();
// ログメッセージを作成
$log_message = sprintf(
"ACCESS | DateTime: %s | IP: %s | Method: %s | URL: %s | POST: %s",
$datetime,
$ip,
$method,
$full_url,
json_encode($post_data, JSON_UNESCAPED_UNICODE)
);
// CodeIgniter標準のログメソッドで記録
log_message('info', $log_message);
}
}
log_message() が CodeIgniter の標準ログメソッドです:
log_message('info', 'ログメッセージ');
log_message('error', 'エラーメッセージ');
log_message('debug', 'デバッグメッセージ');
標準ログとは別のファイルに記録したい場合:
private function _log_access()
{
$datetime = date('Y-m-d H:i:s');
$ip = $this->input->ip_address();
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$log_data = sprintf("[%s] IP: %s | URL: %s\n", $datetime, $ip, $url);
// カスタムログファイルに書き込み
$log_file = APPPATH . 'logs/payment_access_' . date('Y-m-d') . '.log';
file_put_contents($log_file, $log_data, FILE_APPEND | LOCK_EX);
}
application/config/config.php で以下を確認:
$config['log_threshold'] = 1; // 1以上に設定(1=エラー、2=デバッグ、3=情報、4=全て)
$config['log_path'] = ''; // デフォルトは application/logs/
この方法で、決済システムのコントローラー内で明示的にログを記録できます。