Jak zrobić błąd logowania w CodeIgniter (PHP)

94

Chcę, aby błąd logowania się w PHP CodeIgniter. Jak włączyć rejestrowanie błędów?

Mam parę pytań:

  1. Jakie są wszystkie kroki, aby zarejestrować błąd?
  2. Jak tworzony jest plik dziennika błędów?
  3. Jak przesłać komunikat o błędzie do pliku dziennika (gdy wystąpi błąd)?
  4. Jak wysłać wiadomość e-mail z tym błędem na adres e-mail?
udaya
źródło

Odpowiedzi:

182

CodeIgniter ma wbudowane funkcje rejestrowania błędów.

  • Udostępnij folder / application / logs do zapisu
  • W /application/config/config.php ustaw
    $config['log_threshold'] = 1;
    lub użyj większej liczby, w zależności od tego, ile szczegółów chcesz w swoich dziennikach
  • Posługiwać się log_message('error', 'Some variable did not contain a value.');
  • Aby wysłać wiadomość e-mail, musisz rozszerzyć podstawową metodę klasy CI_Exceptions log_exceptions(). Możesz to zrobić samodzielnie lub skorzystać z tego . Więcej informacji o rozszerzaniu rdzenia tutaj

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

Keyo
źródło
Czy ma to wpływ na bezpieczeństwo?
Aakil Fernandes
Spowoduje to zrzucenie danych do pliku php, którego nazwa jest w formacie: log- [Ymd H: i: s] lub jakąkolwiek wartość ustawioną w konfiguracji klucza log_date_format zdefiniowanej w pliku konfiguracyjnym. Dopóki nie możesz logować / zrzucać wrażliwych danych, powinno być całkiem bezpieczne. Ten plik jest domyślnie powiązany ze stroną index.html, więc oczywiście wygenerowane pliki php nie byłyby publicznie dostępne - ale nigdy się nie dowiesz. Upewnij się, że masz wszystkie te środki ostrożności, jeśli zmienisz domyślny katalog application / logs.
Vincent Edward Gedaria Binua
7
Udostępnij folder / application / logs do zapisu <<<, co mi pomogło
Sergey Grechin
1
Kiedy ustawiłem "$ config ['log_threshold'] = 1;", nie otrzymałem żadnych dzienników w moim folderze / application / logs. Jednak gdy ustawiłem „$ config ['log_threshold'] = 3”, pojawił się plik dziennika. Mam nadzieję że to pomoże. Dziękuję Ci! Pokój.
masarapmabuhay
25

Aby po prostu umieścić linię w dzienniku błędów serwera, użyj funkcji PHP error_log (). Jednak ta metoda nie spowoduje wysłania wiadomości e-mail.

Po pierwsze, aby wywołać błąd:

trigger_error("Error message here", E_USER_ERROR);

Domyślnie zostanie to zapisane w pliku dziennika błędów serwera. Zobacz dyrektywę ErrorLog dla Apache. Aby ustawić własny plik dziennika:

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

Zwróć uwagę, że wybrany plik dziennika musi już istnieć i umożliwiać zapisywanie przez proces serwera. Najprostszym sposobem udostępnienia pliku do zapisu jest uczynienie użytkownika serwera właścicielem pliku. (Użytkownikiem serwera może być nikt, _www, apache lub coś innego, w zależności od dystrybucji systemu operacyjnego).

Aby wysłać błąd e-mailem, musisz skonfigurować niestandardową procedurę obsługi błędów:

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);

Więcej informacji można znaleźć w odpowiedniej dokumentacji PHP .

Mark Eirich
źródło
3

Upewnij się również, że zezwoliłeś Codeigniter na rejestrowanie typów komunikatów, które chcesz w pliku konfiguracyjnym.

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

Gpak
źródło
1

Więcej o pytaniu w części 4 Jak wysłać e-mailem ten błąd na adres e-mail? Funkcja error_log również ma miejsce docelowe dla e-maili. http://php.net/manual/en/function.error-log.php

Agha, tutaj znalazłem przykład, który pokazuje użycie. Wyślij wiadomość o błędzie pocztą e-mail za pomocą error_log ()

error_log($this->_errorMsg, 1, ADMIN_MAIL, "Content-Type: text/html; charset=utf8\r\nFrom: ".MAIL_ERR_FROM."\r\nTo: ".ADMIN_MAIL);
Mistrz James
źródło
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
źródło