개발-PHP

[함수] 파일에 로그 기록을 위한 함수 비교(fopen vs error_log)

WEBKIKIS 2016. 3. 30. 20:47
반응형

[함수] 파일에 로그 기록을 위한 함수 비교(fopen vs error_log)


테스트 환경
Ubuntu 14.04(vm)
php 5.5.20 cli

다음의 3가지 경우에 대해 루프를 만번, 백만번으로 하여 간단한 테스트 진행

1. 파일을 열어놓고 연속하여 쓸때
<?php                                 
$start = microtime(true);             
$msg = "가나다라마바사아자차카파타하\n";
$path = 'error_log_test2.log';         
$fp = fopen($path, 'a');               
for($i=0;$i<1000000;$i++)             
{                                     
    fwrite($fp, $msg);                 
}                                     
fclose($fp);                           
$end = microtime(true);               
$runtime = $end - $start;             
echo $runtime."\n";                   
// loop 10000                           
// 0.019741058349609                   
// 0.020673990249634                   

//loop 1000000                         
// 1.3019089698792                     
// 1.286828994751                       

2. 에러 로그를 기록하기 위한 함수
<?php                                 
$start = microtime(true);             
$msg = "가나다라마바사아자차카파타하\n";
$path = 'error_log_test.log';         
for($i=0;$i<1000000;$i++)             
{                                     
    error_log($msg,3,$path);           
}                                     
$end = microtime(true);               
$runtime = $end - $start;             
echo $runtime."\n";                   
// loop 10000                           
// 0.065378904342651                   
// 0.057605981826782                   

// loop 1000000                         
// 5.6507439613342                     
// 5.5530431270599

3. 로그 기록으로 많이 쓰이는 형태
<?php
$start = microtime(true);
$msg = "가나다라마바사아자차카파타하\n";
$path = 'error_log_test3.log';
for($i=0;$i<1000000;$i++)
{
    $fp = fopen($path, 'a');
    fwrite($fp, $msg);
    fclose($fp);
}
$end = microtime(true);
$runtime = $end - $start;
echo $runtime."\n";
// loop 10000
// 0.063140869140625
// 0.060925006866455

// loop 1000000
// 6.3175179958344
// 6.0115058422089
// ex ) fopen option이 w 일때 112.84560894966

* 로그 기록을 위해 선택해야할 사항
 - 파일을 열어놓은 상태에서 연속하여 쓰는 것이 가장 빠르다고 할 수 있으나 특정한 목적이 아니면 거의 쓰이지 않음
 - 2, 3번은 속도에서 차이가 있음(대규모 로그 기록으로 3번 방식보다는 2번 방식이 빠름)

결론 : error_log() 에 대한 소개.
많이 쓰이는 간단한 함수인데 잘 모르고 지나가는 분이 많아서 소개해보았습니다.
http://php.net/manual/kr/function.error-log.php


출처 : phpschool

반응형