PR

[CakePHP] ログをデータベースに記録する

システムのログはセキュリティーの意味もあるし、ジャーナルの意味もあるし、デバッグの意味もある。あった方が安心な気がする。意外なものが記録されてたし。

以下はサンプル

スポンサードリンク

[M] mdels/system_log.php

<?php
/*
 * LOG
 *
 * Table:
 * CREATE TABLE IF NOT EXISTS `prefix_system_logs` (
 *   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 *   `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 *   `system` varchar(64) NOT NULL,
 *   `level` varchar(6) NOT NULL,
 *   `client` varchar(15) NOT NULL,
 *   `message` varchar(512) NOT NULL,
 *   PRIMARY KEY (`id`)
 * ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 *
 * Mod.
 *    Casey
 * History:
 *    Ver.0.01b 2009.10.24 beta
*/
class SystemLog extends AppModel {
 var $name = 'SystemLog';
}
?>

[V] views/system_logs/admin_index.ctp

<?php
/*
 * Name:
 *    views/system_logs/admin_index.ctp
 * Mod.
 *    Casey
 * History:
 *    Ver.0.01 2009.12.06 test
*/
?>
<h1>[管理者専用画面]システム稼動ログ一覧</h1>
<table>
 <tr>
  <th>日時</th>
  <th>システム</th>
  <th>レベル</th>
  <th>クライアント</th>
  <th>内容</th>
 </tr>
 <!-- $remotes配列をループして、投稿記事の情報を表示 -->
 <?php foreach ($logs as $log): ?>
 <tr>
  <td><?php echo $log['SystemLog']['created']; ?></td>
  <td><?php echo $log['SystemLog']['system'];?></td>
  <td><?php echo $log['SystemLog']['level'];?></td>
  <td><?php echo $log['SystemLog']['client'];?></td>
  <td><?php echo $log['SystemLog']['message'];?></td>
 </tr>
 <?php endforeach; ?>
</table>
<?php
echo $paginator->prev('<< '.__('previous', true), array(), null, array('class'=>'disabled' ));
echo ' | ' . $paginator->numbers() . ' | ';
echo $paginator->next(__('next', true).' >>', array(), null, array('class'=>'disabled' ));
?>

[C] app/controllers/system_logs_controller.php

<?php
/*
 * app/controllers/system_logs_controller.php
 *
 * About:
 *  - システムログを表示する
 *  - 管理者のみリストを閲覧できる
 * Mod.:
 *    Casey
 * History:
 *    Ver.0.01b 2009.10.27 beta
*/
class SystemLogsController extends AppController {
 var $name = 'SystemLogs';
 var $components = array('Auth');
 var $paginate = array(
  'SystemLog' => array(
   'order' => array('SystemLog.created desc'),
  )
 );
 function beforeFilter(){
  parent::beforeFilter();
  $this->Auth->allow();
 }

 function admin_index() {
  $this->adminOnly();
  $this->LOG(__METHOD__, 'info', 'Display list view.');
  $this->set('user', $this->_getUser());  // get user info
  $this->set('logs', $this->paginate('SystemLog'));
 }
}
?>

[C] app_controller.php

 /*
  * Name:
  *    LOG, app_controller
  * Usage:
  *    $this->LOG('Users.add', 'notice', 'Add new user.');
  * Mod.
  *    Casey
  * History:
  *    Ver.0.01 2009.10.24 first
 */
 function LOG($systemName, $level, $message){
  $ip = $this->RequestHandler->getClientIP();
  $data = array(
   'system' => $systemName,
   'level'  => $level,
   'message' => $message,
   'client' => $ip,
   'created' => '',
  );
  $this->SystemLog->create();
  $this->SystemLog->save($data);
 }

コメント