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);
}
}
이제 '오늘 날짜'라는 이름의 로그 파일을 만들고 로그인을 위해 해당 함수를 사용하면 다른 기능과 마찬가지로 사용자가 로그인한 것으로 기록될 것입니다.하지만 나는 매일 하나의 파일만 원한다.
제가 코드를 어떻게 해야 하는지 안내하고 가르쳐 줄 수 있는 사람이 있나요?
로그 파일에 쓰고 매일 새 로그 파일을 만들려면date("j.n.Y")파일 이름의 일부로 사용합니다.
//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);
그래서 당신은 그것을 당신의 안에 넣어야 한다.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: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);
}
}
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('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");
@jon의 답변에 동의합니다.방금 추가한 수정한 경로로log내부 디렉토리root
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);
}
wh_log('log to file');
방금 추가했다$_SERVER['DOCUMENT_ROOT']
이 문서를 확인해 주십시오.
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
내장된 기능을 사용하여 사용자 오류/경고/통지를 트리거하고 처리할 수 있습니다.에러 핸들러 내부에서는, 모든 레코드를 사용하거나 파일에 보존할 수 있습니다.매일 하나의 파일을 가지려면 다음과 같은 방법을 사용합니다.sprintf('%s.log', date('Y-m-d'))파일명으로 지정합니다.이제 어디서부터 시작해야 할지 알아야지:)
이게 제 작업 코드입니다.연결시켜준 파울로에게 고마워.커스텀 에러 핸들러를 작성해,trigger_error올바르게 기능하다$errno오류가 아니더라도 예외입니다.관리자 권한 없이 로그 파일 디렉토리에 쓸 수 있는지 확인하십시오.
<?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);
?>
아래 기능 사용
// 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");
위의 함수는 적절한 설명과 함께 로그인 파일 php_error를 생성하고 이메일을 보냅니다.
로그를 인쇄하려면 이 기능을 사용합니다. 그러면 로그 파일이 생성됩니다.log폴더입니다.로그 폴더가 없는 경우 로그 폴더를 만듭니다.
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);
}
커스텀 로그 함수(php 서버용):
특징:
로그는 퍼블릭에 숨겨집니다(서버에서 설정을 하지 않고).
읽기 쉬운 로그 데이터
function log_it($info)
{
$filename = $_SERVER['DOCUMENT_ROOT'] . '/' . '1LOGS.php';
$dieCode = "<?php die();?>";
$fileStart = @file_get_contents($filename, false, null, 0, 14);
if ($fileStart) {
if ($fileStart !== $dieCode)
file_put_contents($filename, $dieCode . file_get_contents($filename));
} else file_put_contents($filename, $dieCode);
if (is_string($info) || is_int($info) || is_float($info)) $txt = ' ' . $info;
elseif (is_array($info) || is_object($info)) $txt = PHP_EOL . ' ' . print_r($info, true);
else $txt = ' ' . 'Data Type: ' . gettype($info);
file_put_contents(
$filename,
PHP_EOL . '>>> ( Date:' . date("Y:m:d H:i:s") . ' )' . $txt,
FILE_APPEND
);
}
개선의 여지가 있는지 여부를 알리다
PHP 로그 기능은 다음과 같습니다.
행을 $maxLogs=5 「」를 지정합니다$logOrder='top'
<?php
##### Start Script
lg('Script start','start');
#Code......
lg('Script end','end');
function lg($str,$mod='Your Log Category'){
$ts = microtime(true);
if(!defined('logTimer')){
define('logTimer',microtime(true));
}
$diff=abs(round(($ts-logTimer)*1000,2));
$maxLogs=5;
$logOrder='top';#new Logs at top
$filename = './log.txt';
$log=[];
if(!file_exists($filename)){
if(!file_put_contents($filename,json_encode($log,128))){
echo "Can’t open to write '$filename' Check Permissions";
return;
}
}else{
$c=file_get_contents($filename);
if(trim($c)==''){$c='[]';}
$log =@json_decode($c,true);
if(!is_Array($log)){$log=[];}
}
$new=['mod'=>$mod,'date'=> date('Y-m-d H:i:s')." Scripttime: ".$diff."ms",'log'=>$str];
if($logOrder=='top'){
array_unshift($log , $new);
$log=array_slice($log,0,$maxLogs);
}else{
$log[]=$new;
$log=array_slice($log,0-$maxLogs,$maxLogs);
}
$logs=json_encode($log,128);
if(!file_put_contents($filename,$logs) ){echo ("Can’t open to write '$filename' Check Permissions") ;return;}
return $str;
}
?>
출력은 다음과 같습니다.
[
{
"mod": "delete",
"date": "2022-08-04 13:48:02 0.33ms",
"log": "test 2"
},
{
"mod": "start",
"date": "2022-08-04 13:48:29 0ms",
"log": "test"
},
{
"mod": "delete",
"date": "2022-08-04 13:48:29 0.27ms",
"log": "test 2"
}
]
언급URL : https://stackoverflow.com/questions/19898688/how-to-create-a-logfile-in-php
'programing' 카테고리의 다른 글
| 데이터 잘라내기:1행의 'logo' 열에 대한 데이터가 너무 깁니다. (0) | 2022.12.06 |
|---|---|
| 클래스와 타입의 차이 (0) | 2022.12.06 |
| SQL은 A열에 대한 결과를 먼저 표시한 후 B열에 대한 결과를 표시합니다. (0) | 2022.12.06 |
| MariaDB: dynamic_columns로 데이터 인파일 로드 (0) | 2022.12.06 |
| 동일한 방법으로 (서로 참조하는)2개의 리스트를 정렬하는 방법 (0) | 2022.12.06 |