디버그 로그를 인쇄하는 방법?


129

PHP 코드를 디버깅하고 싶지만 화면이나 파일에 로그를 인쇄하는 것이 좋습니다.

PHP 코드로 로그를 인쇄하려면 어떻게해야합니까?

일반적인 print/ printf콘솔이 아닌 HTML 출력으로 이동하는 것 같습니다.

PHP 코드를 실행하는 Apache 서버가 있습니다.


스크립트가 웹 브라우저 또는 콘솔에서 실행되고 있습니까 (일명 apache / iis가 아닌 php.exe를 사용하여 구문 분석 됨)?
danielrsmith

이 질문을 보시고 유용한 로깅 코드가 있습니다 : stackoverflow.com/questions/5769537/…
Ben

어떤 언어에서 왔습니까? 그래서 당신은 PHP가 다른 컴파일 언어와는 매우 다릅니다
Ibu

1
@lbu : 참으로. 나는 기대하지 않았다, printf질문은 많은지지를 얻을 것이다 ...
eugene

error_log ($ 문자열);
Thewebus

답변:


186

덜 알려진 트릭은 mod_php가 stderr을 Apache 로그에 매핑한다는 것입니다. 그리고 그것에 대한 스트림이 있으므로 Apache 오류 로그에 file_put_contents('php://stderr', print_r($foo, TRUE))값을 멋지게 덤프합니다 $foo.


1
+ 언급을 위해 on, on btw 또한 콘솔 응용 프로그램을 디버깅 할 때 error_log의 값을 'php : // stdout'으로 설정하고 오류 메시지가 콘솔에 바로 표시되도록 할 수 있습니다 : error_log ( "You messed up!", 3 , "php : // stdout");
stefgosselin

4
+1이 답변을 찾는 데 너무 오래 걸렸습니다. 이것이 내가 정말로 찾던 전부입니다. 내 배열에 무엇이 포함되어 있는지 확인하는 방법을 알 수 없었습니다 (Drupal에서 작동).
SteveS

또한 필요한 유형 정보를 얻지 못하면 if var_export($foo, true)대신 사용 하는 것이 좋습니다 . print_r($foo, true)print_r
Ben

error_log (print_r ($ foo))와 같지 않습니까? ?
Brunis

143
error_log(print_r($variable, TRUE)); 

유용 할 수 있습니다


2
불행히도 이것이 가장 편리한 솔루션입니다. Xdebug는 항상 실행하기 위해 무겁습니다. 당신을 위해 투표
Phung D.

26

error_log 를 사용 하여 서버 오류 로그 파일 (또는 원하는 경우 선택적인 다른 파일)로 보낼 수 있습니다


21

Linux를 사용하는 경우 :

file_put_contents('your_log_file', 'your_content');

또는

error_log ('your_content', 3, 'your_log_file');

그런 다음 콘솔에서

tail -f your_log_file

파일에 넣은 마지막 줄이 계속 표시됩니다.


9

마음의 틀을 바꿔야합니다. 당신은 PHP를 작성하고 있습니다. 콘솔 환경에서는 PHP에서의 디버깅이 수행되지 않습니다.

PHP에는 3 가지 범주의 디버깅 솔루션이 있습니다.

  1. 웹 페이지로 출력합니다 (사물을 더 잘 보려면 dBug 라이브러리 참조).
  2. 로그 파일에 쓰기
  3. xDebug를 사용한 세션 디버깅

PHP를 익숙한 다른 언어처럼 행동하게 만드는 대신에 그것들을 사용하는 법을 배우십시오.


31
시간을 기록 콘솔 애플리케이션과 다양한 많은 지출 하나로서 가 아닌 웹 스크립트를, 나는 정중하게 그 동의합니다.
stefgosselin

콘솔 응용 프로그램을 유지 관리하고 개발하는 데 많은 노력을 기울이고 있으며 영어를 잘못 해석하면 콘솔 응용 프로그램을 디버깅하려고한다고 생각했습니다. 편집기에서
stefgosselin

1
@ Stefgosselin : Netbeans는 거의 동일하지만 xDebug에서 가장 잘 보이는 것은 Aptana입니다.
Sylverdrag

1
Netbeans에서 xDebug를 사용하며 대부분 잘 작동합니다. 그러나 파일에 물건을 기록해야 할 때가 있습니다.
cosan

이것도 시도하십시오. 당신은 더 많은 것을 할 수 있습니다! stackoverflow.com/a/44050914/2053479
ganesh

5

콘솔에서 디버깅하고 있습니까? PHP 디버깅을위한 다양한 옵션이 있습니다. 빠르고 더러운 디버깅에 사용되는 가장 일반적인 기능은 var_dump 입니다.

var_dump가 대단하고 많은 사람들이 그 모든 것을 수행하지만, 그것을 매끄럽게 만들 수 있는 다른 도구와 기술 이 있습니다.

웹 페이지에서 디버깅 할 때 도움이되는 사항은 <pre> </pre>덤프 문을 태그로 감싸서 배열과 객체에 적절한 형식을 지정합니다.

즉 :

<div> some html code ....
      <a href="<?php $tpl->link;?>">some link to test</a>
</div>

      dump $tpl like this:

    <pre><?php var_dump($tpl); ?></pre>

마지막으로 오류 처리 디버깅이 오류를 표시하도록 설정되어 있는지 확인하십시오. 서버 구성에 액세스 할 수없는 경우 스크립트 맨 위에 이것을 추가해야 할 수도 있습니다.

error_reporting(E_ALL);
ini_set('display_errors', '1');

행운을 빕니다!


2

Zend 와 같은 프레임 워크를 통합하지 않으려면 trigger_error 메소드를 사용 하여 php 오류 로그에 로그 할 수 있습니다 .


2

간단히 방법은 trigger_error입니다.

 trigger_error("My error");

그러나 배열이나 객체를 넣을 수 없으므로

var_dump

trigger_error는 아마도 오류 로그에 쓰는 가장 좋은 방법입니다. 나중에 일부 사용자 정의 데이터로 로그 줄을 수정하려고 할 때 자신에게 감사 할 것입니다.
Anshul

2

다음과 같은 파일에 쓸 수도 있습니다.

$logFilePath = '../logs/debug.text';
ob_start();

// if you want to concatenate:
if (file_exists($logFilePath)) {
    include($logFilePath);
}
// for timestamp
$currentTime = date(DATE_RSS);

// echo log statement(s) here
echo "\n\n$currentTime - [log statement here]";

$logFile = fopen($logFilePath, 'w');
fwrite($logFile, ob_get_contents());
fclose($logFile);
ob_end_flush();

PHP가 파일에 액세스하고 파일에 쓸 수 있도록 적절한 권한이 설정되어 있는지 확인하십시오 ( 775).


1

php curl 모듈을 사용하여 http://liveoutput.com/ 을 호출 할 수 있습니다 . 이것은 php.ini의 특정 제한이 존재하여의 사용을 제한하는 안전한 회사 환경에서 효과적입니다 file_put_contents.


1

이것은 PHP 디버깅 및 로깅을위한 훌륭한 도구입니다 : PHp Debugger & Logger

단 3 줄의 코드로 즉시 작동합니다. Ajax 디버깅을 위해 메시지를 js 콘솔에 보내고 오류 처리기를 대체 할 수 있습니다. 또한 var_dump () 및 print_r ()와 같은 변수에 대한 정보를 더 읽기 쉬운 형식으로 덤프합니다. 아주 좋은 도구!


1

나는 이것들을 많이 사용했지만 개발할 때 일반적으로 디버깅해야하며 localhost에서 개발 한 이후 다른 사람들의 조언을 따르고 이제 브라우저의 JavaScript 디버그 콘솔에 씁니다 ( http : //www.codeforest 참조) . net / debugging-php-in-browsers-javascript-console ).

즉, PHP에서 브라우저에서 생성하는 웹 페이지를보고 F12를 눌러 디버그 추적을 빠르게 표시하거나 숨길 수 있습니다.

디버거, CSS 레이아웃 등을위한 개발자 도구를 끊임없이보고 있기 때문에 PHP 로그를 살펴 보는 것이 좋습니다.

누구든지 그 코드를 우리에게 결정한다면, 나는 약간의 변경을했다. 후

function debug($name, $var = null, $type = LOG) {

나는 덧붙였다

$name = 'PHP: ' . $name;

내 서버 측 PHP가 HTML 관련 JavaScript를 생성하기 때문에 PHP와 JS의 출력을 구별하는 것이 유용하다는 것을 알았습니다.

(참고 : 현재 PHP, JS 및 데이터베이스 액세스에서 다른 출력 유형을 켜고 끌 수 있도록 이것을 업데이트하고 있습니다)


1

나는 cakephp를 사용하므로 다음을 사용합니다.

$this->log(YOUR_STRING_GOES_HERE, 'debug');

0

당신이 사용할 수있는:

<?php
echo '<script>console.log("debug log")</script>';
?>

2
이것은 많은 오버 헤드가 있습니다. 간단한 오류 출력을 위해 javascript를 호출하는 이유는 무엇입니까?
clockw0rk

-8

당신이 사용할 수있는

<?php
{
    AddLog("anypage.php","reason",ERR_ERROR);
}
?>

또는 그 진술을 로그에 인쇄하려면 다음을 사용할 수 있습니다

AddLog("anypage.php","string: ".$string,ERR_DEBUG_LOW);

8
AddLog? 이것은 기본 기능이 아닙니다.
stefgosselin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.