Bagaimana melakukan error logging di CodeIgniter (PHP)

95

Saya ingin error logging di PHP CodeIgniter. Bagaimana cara mengaktifkan error logging?

Saya punya beberapa pertanyaan:

  1. Apa saja langkah-langkah untuk mencatat kesalahan?
  2. Bagaimana file log kesalahan dibuat?
  3. Bagaimana cara mendorong pesan kesalahan ke dalam file log (setiap kali terjadi kesalahan)?
  4. Bagaimana Anda mengirim email kesalahan itu ke alamat email?
udaya
sumber

Jawaban:

183

CodeIgniter memiliki beberapa fungsi error logging.

  • Jadikan folder / application / logs Anda dapat ditulis
  • Di /application/config/config.php atur
    $config['log_threshold'] = 1;
    atau gunakan nomor yang lebih tinggi, tergantung pada seberapa banyak detail yang Anda inginkan di log Anda
  • Menggunakan log_message('error', 'Some variable did not contain a value.');
  • Untuk mengirim email, Anda perlu memperluas metode kelas CI_Exceptions inti log_exceptions(). Anda dapat melakukan ini sendiri atau menggunakan ini . Info lebih lanjut tentang memperluas inti di sini

Lihat http://www.codeigniter.com/user_guide/general/errors.html

Keyo
sumber
Apakah ada implikasi keamanan untuk ini?
Aakil Fernandes
Ini membuang data ke file php yang nama filenya dalam format: log- [Ymd H: i: s] atau nilai apa pun yang disetel pada konfigurasi kunci log_date_format yang ditentukan pada file konfigurasi Anda. Selama Anda tidak bisa mencatat / membuang data sensitif, ini seharusnya cukup aman. File ini relatif terhadap halaman index.html secara default sehingga file php yang dibuat dengan jelas tidak akan dapat diakses publik - tetapi Anda tidak akan pernah tahu. Pastikan untuk menerapkan semua tindakan pencegahan ini jika Anda mengubah direktori aplikasi / log default.
Vincent Edward Gedaria Binua
7
Jadikan folder / application / logs Anda dapat ditulisi <<< yang membantu saya
Sergey Grechin
1
Ketika saya menyetel "$ config ['log_threshold'] = 1;", saya tidak mendapatkan log apa pun di folder / application / logs saya. Namun, ketika saya menyetel "$ config ['log_threshold'] = 3", sebuah file log muncul. Semoga ini membantu. Terima kasih! Perdamaian.
masarapmabuhay
25

Untuk sederhananya meletakkan baris di log kesalahan server, gunakan fungsi error_log () PHP. Namun, metode itu tidak akan mengirim email.

Pertama, untuk memicu kesalahan:

trigger_error("Error message here", E_USER_ERROR);

Secara default, ini akan masuk ke file log kesalahan server. Lihat direktif ErrorLog untuk Apache. Untuk mengatur file log Anda sendiri:

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

Perhatikan bahwa file log yang Anda pilih harus sudah ada dan dapat ditulis oleh proses server. Cara paling sederhana untuk membuat file dapat ditulis adalah menjadikan pengguna server sebagai pemilik file. (Pengguna server mungkin bukan siapa-siapa, _www, apache, atau yang lainnya, bergantung pada distribusi OS Anda.)

Untuk mengirim kesalahan melalui email, Anda perlu menyiapkan penangan kesalahan khusus:

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('[email protected]', 'I have an error', $message);
}
set_error_handler('mail_error', E_ALL^E_NOTICE);

Silakan lihat dokumentasi PHP yang relevan untuk info lebih lanjut.

Mark Eirich
sumber
3

Juga pastikan bahwa Anda telah mengizinkan codeigniter untuk mencatat jenis pesan yang Anda inginkan dalam file konfigurasi.

yaitu $config['log_threshold'] = [log_level ranges 0-4];

Gpak
sumber
1

Lebih lanjut tentang pertanyaan bagian 4 Bagaimana Anda mengirim email kesalahan itu ke alamat email? Fungsi error_log juga memiliki tujuan email. http://php.net/manual/en/function.error-log.php

Agha, di sini saya menemukan contoh yang menunjukkan penggunaan. Kirim pesan kesalahan melalui email menggunakan error_log ()

error_log($this->_errorMsg, 1, ADMIN_MAIL, "Content-Type: text/html; charset=utf8\r\nFrom: ".MAIL_ERR_FROM."\r\nTo: ".ADMIN_MAIL);
Tuan James
sumber
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/
Charleskimani
sumber