오류 및 경고를 파일에 기록하려면 어떻게 해야 합니까?
스크립트 내에서 모든 오류와 경고를 설정하고 파일에 기록하려면 어떻게 해야 합니까(ppp.ini에서는 아무것도 변경하지 않음)?
파일 이름을 정의하고 모든 오류와 경고가 로그인되도록 합니다.
다음 코드를 사용합니다.
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );
그런 다음 파일을 봅니다.
tail -f /tmp/php-error.log
또는 업데이트php.ini2008년 블로그 엔트리에 기재되어 있습니다.
봐
error_log- 오류 메시지를 어딘가에 보냅니다.
예
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
오류나 경고 또는 로그가 필요할 때마다 이 함수를 호출하도록 자체 오류 핸들러를 사용하여 오류 처리를 사용자 정의할 수 있습니다.자세한 내용은 PHP 매뉴얼의 오류 처리 장을 참조하십시오.
다음 코드를 PHP/인덱스 파일 상단에 넣기만 하면 됩니다.
error_reporting(E_ALL); // Error/Exception engine, always use E_ALL
ini_set('ignore_repeated_errors', TRUE); // always use TRUE
ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment
ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path
이 코드를 .htaccess 파일에 추가합니다(php.ini 파일 또는 ini_set 함수 대신).
<IfModule mod_php5.c>
php_flag log_errors on
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on
</IfModule>
- 코멘트: Apache 타입의 서버용이며, Nginx 등의 서버용이 아닙니다.
그건 내 개인적인 짧은 기능이야
# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty
mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
switch (strtolower($level)) {
case 'e':
case 'error':
$level='ERROR';
break;
case 'i':
case 'info':
$level='INFO';
break;
case 'd':
case 'debug':
$level='DEBUG';
break;
default:
$level='INFO';
}
error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file);
}
php.ini의 설정 옵션을 확인합니다.하고 싶은 대로 하는 것 같아요.로그 파일을 직접 설정하는 옵션도 사용할 수 있다고 생각합니다.
언제?log_errors디렉티브가 로 설정되어 있다.OnPHP에 의해 보고된 오류는 서버 로그 또는 지정한 파일에 기록됩니다.error_log필요에 따라서, 이러한 옵션을 로 설정할 수도 있습니다.
(주의해 주세요.display_errors이 옵션이 활성화 되어 있는 경우 php.ini에서 비활성화해야 합니다.)
또, 이 조작을 실시하려면 , 「AllowOverride Options」지시가 필요합니다.(Apache 2.2.15).
로그 기능은 다음과 같습니다.
로그 행을 편집하여 편집할 수 있습니다.$maxLogs=5로그 쓰기 순서도 지정합니다.$logOrder='top'
<?php
lg('script start','start');
#Code......
lg('script end','End of code');
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"
},
{
"mod": "start",
"date": "2022-08-04 13:48:34 0ms",
"log": "test"
},
{
"mod": "delete",
"date": "2022-08-04 13:48:34 0.92ms",
"log": "test 2"
}
]
언급URL : https://stackoverflow.com/questions/3531703/how-do-i-log-errors-and-warnings-into-a-file
'programing' 카테고리의 다른 글
| 분배, 디스트리뷰트, 세트툴 및 디스트리뷰트2의 차이점 (0) | 2022.11.23 |
|---|---|
| 자바에서 JSON을 유창하게 구축하는 방법은? (0) | 2022.11.23 |
| MariaDB 및 창 기능(또는 SQL:2003 표준 지원) (0) | 2022.11.23 |
| Restful API with Flask 및 MySQL 데이터베이스 with Rasberry Pi (0) | 2022.11.23 |
| 왜 일찍 돌아오는 것이 다른 것보다 느리죠? (0) | 2022.11.23 |