как создать файл журнала в php?

Я хочу создать файл журнала для моей системы для регистрации / регистрации каждого действия, которое они выполняют внутри системы. Но я понятия не имею, как это сделать.

Например, у меня есть этот php-код, который выполняет функцию входа в систему.

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

теперь я хочу создать файл журнала под названием «дата сегодня», а затем, когда эти функции будут использоваться для входа в систему, он напишет, что пользователь вошел в систему, то же самое с другими функциями. Но мне нужен только один файл за каждый день.

Может ли кто-нибудь быть любезным, чтобы вести и научить меня, как мне делать мои коды?

Solutions Collecting From Web of "как создать файл журнала в php?"

Чтобы записать в txt-файл и сделать новый каждый день. Используйте date("jnY") как часть имени файла журнала.

 //Something to write to txt log $log = "User: ".$_SERVER['REMOTE_ADDR'].' - '.date("F j, Y, g:ia").PHP_EOL. "Attempt: ".($result[0]['success']=='1'?'Success':'Failed').PHP_EOL. "User: ".$username.PHP_EOL. "Pass: ".$password.PHP_EOL. "-------------------------".PHP_EOL; //Save string to log, use FILE_APPEND to append. file_put_contents('./log_'.date("jnY").'.txt', $log, FILE_APPEND); 

Таким образом, вы можете разместить это в своем hasAccess() .

 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:ia").PHP_EOL. "Attempt: ".($result[0]['success']=='1'?'Success':'Failed').PHP_EOL. "User: ".$username.PHP_EOL. "Pass: ".$password.PHP_EOL. "-------------------------".PHP_EOL; //- file_put_contents('./log_'.date("jnY").'.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); } } 

Вы можете использовать встроенную функцию trigger_error() для запуска пользовательских ошибок / предупреждений / уведомлений и set_error_handler() для их обработки. Внутри обработчика ошибок вы можете использовать error_log() или file_put_contents() для хранения всех записей в файлах. Чтобы иметь один файл за каждый день, просто используйте что-то вроде sprintf('%s.log', date('Ym-d')) как имя файла. И теперь вы должны знать, с чего начать … 🙂

Пожалуйста, ознакомьтесь с этой документацией.

http://php.net/manual/en/function.error-log.php

Пример:

 <?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, "operator@example.com"); } // another way to call error_log(): error_log("You messed up!", 3, "/var/tmp/my-errors.log"); ?> 

Пожалуйста, проверьте этот код, он отлично работает для меня.

 $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 

создайте файл журнала в php , вам необходимо передать данные по функции, и он создаст для вас файл журнала.

 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('dM-Y') . '.log'; file_put_contents($log_file_data, $log_msg . "\n", FILE_APPEND); } 

Используйте функцию ниже

 // 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("Ymd 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"); 

Выше функция создаст журнал в файле php_error с правильным описанием и будет отправлено письмо.

Это мой рабочий код. Спасибо Пауло за ссылки. Вы создаете собственный обработчик ошибок и вызываете функцию trigger_error с правильным исключением $errno , даже если это не ошибка. Убедитесь, что вы можете писать в каталог файла журнала без доступа администратора.

 <?php $logfile_dir = "C:\workspace\logs\\"; // or "/var/log/" for Linux $logfile = $logfile_dir . "php_" . date("ymd") . ".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("ymd 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("ymd 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("ymd H:i:s.").gettimeofday()["usec"] . " $filename ($errline): " . "NOTICE >> message = $errstr\n", FILE_APPEND | LOCK_EX); break; default: file_put_contents($logfile, date("ymd 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); ?>