เก็บ CodeIgniter log ด้วย hook

Byphunsanit

เก็บ CodeIgniter log ด้วย hook

วิธีที่จะพัฒนาและดูแลเว็บคือทำระบบ log ที่จะบันทึกข้อมูลการใช้งาน ซึ่งจะบันทึกสิ่งที่เกิดขึ้นไว้สำหรับเข้ามาดูเหตุการณ์ที่เกิดขึ้นย้อนหลังได้ มีประโยชน์ในการดูแลระบบโดยเฉพาะตัวที่เป็น API ให้ระบบอื่นๆเรียกใช้ สำหรับ ci เราสามารถเขียนได้โดยการใช้ hook

ระบบ Hook (ตะขอ) คือ เป็นตะขอที่เกี่ยวกับเหตุการณ์ซักอย่างแล้วจึงทำงาน เหมือนกับ tricker ในดาต้าเบส หรือจะ อธิบายการทำงานง่ายๆ ก็เหมือน คุณไปที่ร้านอาหารคิดไม่ออกว่าจะทานอะไร ใช้วิธีรอให้เพื่อนสั่งแล้วบอกว่า หมีทู่ (me too.) นั้นละครับ

  1. ก่อนอื่น ไปเปิดการใช้งาน hook ก่อน เปิดไฟล์ /application /config/config.php แก้ $config[‘enable_hooks’] = FALSE; เป็น TRUE;
  2. เปิดไฟล์ /application /config/ hooks.php เพิ่มบรรทัด
    $hook['post_system'][] = array(
            'class' => '',
            'function' => 'log_Profiling',
            'filename' => 'log_Profiling.php',
            'filepath' => 'hooks'
    );
    
  3. จากนั้นไปสร้างไฟล์ log_Profiling.php ใน /application/hooks เนื้อหาตามนี้ครับ
    <?php
    function log_Profiling(){
    global $CI ,$application_folder;
    	$output = '<html><body>';
    	$output .= '<fieldset id="ci_profiler_benchmarks" style="border:1px solid #c00000;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">
    <legend style="color:#c00000;">OUTPUT</legend>'.$CI->output->get_output().'</fieldset>';
    	if( ! isset($_POST['profiler'])){
    		$CI->load->library('profiler');
    		if ( ! empty($CI->_profiler_sections)){
    			$CI->profiler->set_sections($this->_profiler_sections);
    		}
    		$output .= $CI->profiler->run();
    	}
    	$output .= '</body></html>';
    	$fp = fopen($application_folder.'/logs/Profiling/'.date('Y-m-d-H-i-s-U').'_'.$CI->router->fetch_class().'_'.$CI->router->fetch_method().'.html' ,'w');
    	flock($fp ,LOCK_EX);
    	fwrite($fp ,$output);
    	flock($fp ,LOCK_UN);
    	fclose($fp);
    }
    
  4. สร้างโฟลเดอร์ application/logs/Profiling/

About the author

phunsanit administrator

Leave a Reply