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 |