Ich möchte eine Protokolldatei für mein System erstellen, um jede Aktion im System zu registrieren / protokollieren. Aber ich habe keine Ahnung, wie es geht.
Zum Beispiel habe ich diesen PHP-Code, der die Anmeldefunktion ausführt.
public function hasAccess($username,$password){
$form = array();
$form['username'] = $username;
$form['password'] = $password;
$securityDAO = $this->getDAO('SecurityDAO');
$result = $securityDAO->hasAccess($form);
//var_dump($form);
//var_dump($result);
if($result[0]['success']=='1'){
$this->Session->add('user_id', $result[0]['id']);
//$this->Session->add('username', $result[0]['username']);
//$this->Session->add('roleid', $result[0]['roleid']);
return $this->status(0,true,'auth.success',$result);
}else{
return $this->status(0,false,'auth.failed',$result);
}
}
Jetzt möchte ich eine Protokolldatei mit dem Titel "Das Datum heute" erstellen. Wenn diese Funktionen zum Anmelden verwendet werden, wird geschrieben, dass sich der Benutzer angemeldet hat, genau wie bei anderen Funktionen. Aber ich möchte nur eine einzige Datei für jeden Tag.
Könnte jemand so freundlich sein, mir zu zeigen, wie ich meine Codes machen soll?
Antworten:
Um in eine Protokolldatei zu schreiben und jeden Tag eine neue zu erstellen, können Sie diese
date("j.n.Y")
als Teil des Dateinamens verwenden.//Something to write to txt log $log = "User: ".$_SERVER['REMOTE_ADDR'].' - '.date("F j, Y, g:i a").PHP_EOL. "Attempt: ".($result[0]['success']=='1'?'Success':'Failed').PHP_EOL. "User: ".$username.PHP_EOL. "-------------------------".PHP_EOL; //Save string to log, use FILE_APPEND to append. file_put_contents('./log_'.date("j.n.Y").'.log', $log, FILE_APPEND);
Sie würden das also in Ihre
hasAccess()
Methode einfügen.public function hasAccess($username,$password){ $form = array(); $form['username'] = $username; $form['password'] = $password; $securityDAO = $this->getDAO('SecurityDAO'); $result = $securityDAO->hasAccess($form); //Write action to txt log $log = "User: ".$_SERVER['REMOTE_ADDR'].' - '.date("F j, Y, g:i a").PHP_EOL. "Attempt: ".($result[0]['success']=='1'?'Success':'Failed').PHP_EOL. "User: ".$username.PHP_EOL. "-------------------------".PHP_EOL; //- file_put_contents('./log_'.date("j.n.Y").'.txt', $log, FILE_APPEND); if($result[0]['success']=='1'){ $this->Session->add('user_id', $result[0]['id']); //$this->Session->add('username', $result[0]['username']); //$this->Session->add('roleid', $result[0]['roleid']); return $this->status(0,true,'auth.success',$result); }else{ return $this->status(0,false,'auth.failed',$result); } }
quelle
Erstellen Sie eine Protokolldatei in PHP , um dies zu tun, müssen Sie Daten auf Funktion übergeben und es wird eine Protokolldatei für Sie erstellen.
function wh_log($log_msg) { $log_filename = "log"; if (!file_exists($log_filename)) { // create directory/folder uploads. mkdir($log_filename, 0777, true); } $log_file_data = $log_filename.'/log_' . date('d-M-Y') . '.log'; // if you don't add `FILE_APPEND`, the file will be erased each time you add a log file_put_contents($log_file_data, $log_msg . "\n", FILE_APPEND); } // call to function wh_log("this is my log message");
quelle
Bitte überprüfen Sie mit dieser Dokumentation.
http://php.net/manual/en/function.error-log.php
Beispiel:
<?php // Send notification through the server log if we can not // connect to the database. if (!Ora_Logon($username, $password)) { error_log("Oracle database not available!", 0); } // Notify administrator by email if we run out of FOO if (!($foo = allocate_new_foo())) { error_log("Big trouble, we're all out of FOOs!", 1, "[email protected]"); } // another way to call error_log(): error_log("You messed up!", 3, "/var/tmp/my-errors.log"); ?>
quelle
Bitte überprüfen Sie diesen Code, es funktioniert gut für mich.
$data = array('shopid'=>3,'version'=> 1,'value=>1'); //here $data is dummy varaible error_log(print_r($data,true), 3, $_SERVER['DOCUMENT_ROOT']."/your-file-name.log"); //In $data we can mention the error messege and create the log
quelle
Sie können die integrierte Funktion verwenden
trigger_error()
, um Benutzerfehler / Warnungen / Hinweise auszulösen undset_error_handler()
zu behandeln. In Ihrem Fehlerbehandler möchten Sie möglicherweise alle Datensätze in Dateien verwendenerror_log()
oderfile_put_contents()
speichern. Um eine einzelne Datei für jeden Tag zu haben, verwenden Sie einfach so etwas wie einensprintf('%s.log', date('Y-m-d'))
Dateinamen. Und jetzt solltest du wissen, wo du anfangen sollst ... :)quelle
Stimmen Sie der @ jon-Antwort zu. Gerade hinzugefügt, geändert den Pfad, um das
log
Verzeichnis innerhalb der zu erstellenroot
function wh_log($log_msg) { $log_filename = $_SERVER['DOCUMENT_ROOT']."/log"; if (!file_exists($log_filename)) { // create directory/folder uploads. mkdir($log_filename, 0777, true); } $log_file_data = $log_filename.'/log_' . date('d-M-Y') . '.log'; file_put_contents($log_file_data, $log_msg . "\n", FILE_APPEND); }
gerade hinzugefügt
$_SERVER['DOCUMENT_ROOT']
quelle
Verwenden Sie die folgende Funktion
// Enable error reporting ini_set('display_errors', 1); //Report runtime errors error_reporting(E_ERROR | E_WARNING | E_PARSE); //error_reporting(E_ALL & ~E_NOTICE); // Tell php where your custom php error log is ini_set('error_log', 'php_error.log'); $dateTime=date("Y-m-d H:i:s"); $ip= $_SERVER['REMOTE_ADDR']; $errorString="Error occured on time $dateTime by ip $ip"; $php_error_msg.=$errorString; // Append the error message to the php-error log //error_log($php_error_msg); error_log("A custom error has been triggered",1,"email_address","From: email_address");
Die obige Funktion erstellt eine Anmeldedatei php_error mit der richtigen Beschreibung und es wird eine E-Mail gesendet.
quelle
Dies ist mein Arbeitscode. Danke an Paulo für die Links. Sie erstellen einen benutzerdefinierten Fehlerbehandler und rufen die
trigger_error
Funktion mit der richtigen$errno
Ausnahme auf, auch wenn es sich nicht um einen Fehler handelt. Stellen Sie sicher, dass Sie ohne Administratorzugriff in das Protokolldateiverzeichnis schreiben können.<?php $logfile_dir = "C:\workspace\logs\\"; // or "/var/log/" for Linux $logfile = $logfile_dir . "php_" . date("y-m-d") . ".log"; $logfile_delete_days = 30; function error_handler($errno, $errstr, $errfile, $errline) { global $logfile_dir, $logfile, $logfile_delete_days; if (!(error_reporting() & $errno)) { // This error code is not included in error_reporting, so let it fall // through to the standard PHP error handler return false; } $filename = basename($errfile); switch ($errno) { case E_USER_ERROR: file_put_contents($logfile, date("y-m-d H:i:s.").gettimeofday()["usec"] . " $filename ($errline): " . "ERROR >> message = [$errno] $errstr\n", FILE_APPEND | LOCK_EX); exit(1); break; case E_USER_WARNING: file_put_contents($logfile, date("y-m-d H:i:s.").gettimeofday()["usec"] . " $filename ($errline): " . "WARNING >> message = $errstr\n", FILE_APPEND | LOCK_EX); break; case E_USER_NOTICE: file_put_contents($logfile, date("y-m-d H:i:s.").gettimeofday()["usec"] . " $filename ($errline): " . "NOTICE >> message = $errstr\n", FILE_APPEND | LOCK_EX); break; default: file_put_contents($logfile, date("y-m-d H:i:s.").gettimeofday()["usec"] . " $filename ($errline): " . "UNKNOWN >> message = $errstr\n", FILE_APPEND | LOCK_EX); break; } // delete any files older than 30 days $files = glob($logfile_dir . "*"); $now = time(); foreach ($files as $file) if (is_file($file)) if ($now - filemtime($file) >= 60 * 60 * 24 * $logfile_delete_days) unlink($file); return true; // Don't execute PHP internal error handler } set_error_handler("error_handler"); trigger_error("testing 1,2,3", E_USER_NOTICE); ?>
quelle
set_error_handler
jede meiner PHP-Dateien separat auf.Verwenden Sie diese Funktion, um ein Protokoll zu drucken. Dadurch wird eine Protokolldatei im
log
Ordner erstellt. Erstellen Sie einen Protokollordner, falls dieser nicht vorhanden ist.logger("Your msg in log ", "Filename you want ", "Data to be log string or array or object"); function logger($logMsg="logger", $filename="logger", $logData=""){ $log = date("j.n.Y h:i:s")." || $logMsg : ".print_r($logData,1).PHP_EOL . "-------------------------".PHP_EOL; file_put_contents('./log/'.$filename.date("j.n.Y").'.log', $log, FILE_APPEND); }
quelle