วิธีการบันทึกข้อผิดพลาดใน CodeIgniter (PHP)


94

ฉันต้องการข้อผิดพลาดในการเข้าสู่ระบบ PHP CodeIgniter ฉันจะเปิดใช้งานการบันทึกข้อผิดพลาดได้อย่างไร

ฉันมีคำถาม:

  1. ขั้นตอนทั้งหมดในการบันทึกข้อผิดพลาดมีอะไรบ้าง?
  2. ไฟล์บันทึกข้อผิดพลาดถูกสร้างขึ้นอย่างไร?
  3. วิธีการส่งข้อความแสดงข้อผิดพลาดไปยังไฟล์บันทึก (เมื่อใดก็ตามที่เกิดข้อผิดพลาด)
  4. คุณส่งอีเมลข้อผิดพลาดนั้นไปยังที่อยู่อีเมลได้อย่างไร?

คำตอบ:


182

CodeIgniter มีฟังก์ชันบันทึกข้อผิดพลาดบางอย่างในตัว

  • ทำให้โฟลเดอร์/ application / logs ของคุณสามารถเขียนได้
  • ใน/application/config/config.phpตั้งค่า
    $config['log_threshold'] = 1;
    หรือใช้ตัวเลขที่สูงขึ้นขึ้นอยู่กับรายละเอียดที่คุณต้องการในบันทึกของคุณ
  • ใช้ log_message('error', 'Some variable did not contain a value.');
  • log_exceptions()ในการส่งอีเมล์ที่คุณต้องการที่จะขยายวิธีการ CI_Exceptions หลักชั้นเรียน คุณสามารถทำได้ด้วยตัวคุณเองหรือใช้นี้ ข้อมูลเพิ่มเติมเกี่ยวกับการขยายหลักที่นี่

ดูhttp://www.codeigniter.com/user_guide/general/errors.html


มีผลกระทบด้านความปลอดภัยสำหรับสิ่งนี้หรือไม่?
Aakil Fernandes

สิ่งนี้จะทิ้งข้อมูลไปยังไฟล์ php ที่มีชื่อไฟล์อยู่ในรูปแบบ: log- [Ymd H: i: s] หรือค่าใดก็ตามที่ตั้งค่าไว้ในการกำหนดค่าคีย์ log_date_format ที่กำหนดในไฟล์กำหนดค่าของคุณ ตราบใดที่คุณไม่ได้รับข้อมูลที่ละเอียดอ่อนในการบันทึก / ถ่ายโอนข้อมูลก็น่าจะปลอดภัย ไฟล์นี้สัมพันธ์กับหน้า index.html โดยค่าเริ่มต้นดังนั้นไฟล์ php ที่สร้างขึ้นอย่างชัดเจนจึงไม่สามารถเข้าถึงได้แบบสาธารณะ แต่คุณจะไม่มีทางรู้ ตรวจสอบให้แน่ใจว่ามีข้อควรระวังทั้งหมดนี้หากคุณเปลี่ยนไดเร็กทอรีแอปพลิเคชัน / บันทึกเริ่มต้น
Vincent Edward Gedaria Binua

7
ทำให้โฟลเดอร์ / application / logs ของคุณสามารถเขียนได้ <<< ที่ช่วยฉันได้
Sergey Grechin

1
เมื่อฉันตั้งค่า "$ config ['log_threshold'] = 1;" ฉันไม่ได้รับบันทึกใด ๆ ในโฟลเดอร์ / application / logs ของฉัน อย่างไรก็ตามเมื่อฉันตั้งค่า "$ config ['log_threshold'] = 3 ไฟล์บันทึกจะปรากฏขึ้น หวังว่านี่จะช่วยได้ ขอบคุณ! สันติภาพ.
masarapmabuhay

25

หากต้องการใส่บรรทัดในบันทึกข้อผิดพลาดของเซิร์ฟเวอร์ให้ใช้ฟังก์ชัน error_log () ของ PHP อย่างไรก็ตามวิธีดังกล่าวจะไม่ส่งอีเมล

ขั้นแรกในการทำให้เกิดข้อผิดพลาด:

trigger_error("Error message here", E_USER_ERROR);

ตามค่าเริ่มต้นสิ่งนี้จะอยู่ในไฟล์บันทึกข้อผิดพลาดของเซิร์ฟเวอร์ ดูคำสั่ง ErrorLogสำหรับ Apache ในการตั้งค่าไฟล์บันทึกของคุณเอง:

ini_set('error_log', 'path/to/log/file');

โปรดทราบว่าไฟล์บันทึกที่คุณเลือกต้องมีอยู่แล้วและสามารถเขียนได้โดยกระบวนการเซิร์ฟเวอร์ วิธีที่ง่ายที่สุดในการทำให้ไฟล์เขียนได้คือกำหนดให้ผู้ใช้เซิร์ฟเวอร์เป็นเจ้าของไฟล์ (ผู้ใช้เซิร์ฟเวอร์อาจไม่ใช่ใคร _www, apache หรืออย่างอื่นขึ้นอยู่กับการกระจายระบบปฏิบัติการของคุณ)

ในการส่งอีเมลข้อผิดพลาดคุณต้องตั้งค่าตัวจัดการข้อผิดพลาดแบบกำหนดเอง:

function mail_error($errno, $errstr, $errfile, $errline) {
  $message = "[Error $errno] $errstr - Error on line $errline in file $errfile";
  error_log($message); // writes the error to the log file
  mail('you@yourdomain.com', 'I have an error', $message);
}
set_error_handler('mail_error', E_ALL^E_NOTICE);

โปรดดูเอกสาร PHP ที่เกี่ยวข้องสำหรับข้อมูลเพิ่มเติม


3

ตรวจสอบให้แน่ใจด้วยว่าคุณได้อนุญาตให้ codeigniter บันทึกประเภทของข้อความที่คุณต้องการในไฟล์กำหนดค่า

กล่าวคือ $config['log_threshold'] = [log_level ranges 0-4];


1

oin เพิ่มเติมเกี่ยวกับคำถามตอนที่ 4 คุณส่งอีเมลข้อผิดพลาดนั้นไปยังที่อยู่อีเมลได้อย่างไร ฟังก์ชัน error_log มีปลายทางอีเมลด้วย http://php.net/manual/en/function.error-log.php

Agha นี่ฉันพบตัวอย่างที่แสดงการใช้งาน ส่งข้อความแสดงข้อผิดพลาดทางอีเมลโดยใช้ error_log ()

error_log($this->_errorMsg, 1, ADMIN_MAIL, "Content-Type: text/html; charset=utf8\r\nFrom: ".MAIL_ERR_FROM."\r\nTo: ".ADMIN_MAIL);

0
In config.php add or edit the following lines to this:
------------------------------------------------------
$config['log_threshold'] = 4; // (1/2/3)
$config['log_path'] = '/home/path/to/application/logs/';

Run this command in the terminal:
----------------------------------
sudo chmod -R 777 /home/path/to/application/logs/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.