타운광장토픽게시판

https://xetown.com/topics/1345603

 

저번 글에서 공유했던 PHP용 로그 라이브러리를 2년만에 보수해서 다시 업로드합니다.

주요 개선점은 PHP 7.4 및 PHP 8.0 대응입니다.

기존에 올렸던 것은 PHP 7.2 까지만 정상 동작합니다.

다만 새롭게 올리는 것은 PHP 7.1 이상이어야 정상 동작합니다.

그러므로 PHP 7.2 이하에서는 여전히 옛날 것을 사용하시는 것이 좋습니다.

 

장점은 다음과 같습니다.

 

1) 설치가 매우 쉽다

그냥 적당한 디렉토리에 압축 풀어넣고

필요한 곳에서 require_once MyLog.php 하면 끝.

어떤 프로젝트에든 쉽게 끼워넣어서 원하는 로그를 볼 수 있음.

 

2) 크롬브라우저의 콘솔창에서 PHP레벨에서 발생하는 에러를 함께 볼 수 있다

이게 최고의 장점임. 왔다갔다 해야하는 창의 갯수가 줄어드는 강력한 효과.

 

3) 상세한 출력

단순 로그 내용뿐만 아니라 원하는 변수값을 함께 출력가능하고

에러 또는 예외 발생시 에러 발생 위치 및 스택 관련 정보를 모두 출력한다.

(이건 나름 커스텀한 것임)

 

4) 에러 레벨에 따라 경고음과 함께 윈도우 알림박스가 나타나게 설정 가능하다

즉 WARNING 이상의 상황이 발생시 화면을 깨트리지 않고도 개발자에게

아주 확실하게 알려준다

 

5) XDebug_Helper를 이용해서 XTRACE를 OFF로 하는 경우 시스템 성능에

100% 영향을 주지 않는다. 즉 원하는 로그를 맘대로 넣어놓아도

성능 부담이 없으며 ON/OFF가 가능하므로 필요한 경우에만 켜서 볼 수 있다.

별도의 테스트 서버가 아니라 실제 돌아가는 서버라도 로그를 맘대로

넣을 수 있다. (브라우저에서 ON하면 해당 브라우저에서만 로그가

나오는 식이므로)

로거가 여러개 있는 경우 로거별로 따로따로 ON/OFF도 가능한 것 같은데

이건 안해봐서 정확하게는 모르겠음. 

 

6) REST API의 로그도 볼 수 있다

에러를 화면에 출력하는 경우 REST API의 처리 중에 발생하는 에러는

당연히 볼 수 없음. (화면 출력이 없으니까)

그러나 이 라이브러리를 사용하면 REST API도 로그 출력이 가능함!!

이게 얼마나 강력하고 편리한지는 써보면 알게 됨

 

이상과 같습니다.

사용에는 예전과 마찬가지로 PHPConsole 크롬확장과

XDebug_Helper 크롬확장이 필요합니다.

그런데 문제가 있습니다. PHPConsole 크롬확장이

크롬웹스토어에서 내려졌습니다.

아마 개발자가 관리를 안하는 상태인 것 같습니다.

다만 소스가 github에 남아있으므로 설치는 가능합니다.

첨부하는 PHPConsole 크롬확장 소스를

https://zuminternet.github.io/Zum-Chrome-Extension/

이 주소에서 설명하는 방법대로 설치하면 됩니다.

PHPConsole 말고 딴게 있을까 싶어서 찾아봤지만

아쉽게도 대안은 없었습니다.

약간 귀찮지만 어쩔 수 없는 것 같습니다.

나중에 에러 생기면 제가 포크해서 유지보수해볼까 생각중입니다.

 

라이브러리 사용과 관련된 자세한 내용은

저번 글의 댓글들을 참고 부탁드립니다.

 

아.. 참고로 MyLog는 error_log 패스를 자기 자신으로 해놓습니다.

이건 그냥 제 편리를 위해서 이렇게 하는건데 

이게 MyLog 폴더의 권한을 777로 안주면 에러가 발생합니다.

꼭 주의해주세요...

 

-----------------------------------------

 

그리고 이 라이브러리를 라이믹스와 함께 사용하는 방법을 알려드리겠습니다.

안타깝게도 이 라이브러리는 라이믹스와는 정상동작하지 않습니다.

(그누보드와는 잘 동작했었습니다)

이유는 ob_end_clean()에 있습니다.

라이믹스는 자기 자신을 종료하면서 ob_get_level()을 통해서

ob_start()가 불려진 횟수를 파악해서 전부 다 ob_end_clean() 해버립니다.

그런데 제가 사용하는 로그 라이브러리는 자체적으로

ob_start()를 2번 사용합니다.

왜냐면 이 라이브러리의 동작방식이란게 서버에서 발생했던 로그들을

나름대로 버퍼링해두었다가 나중에 셧다운 콜백에서 HTTP헤더에

로그 정보를 담아서 보내는 식이기 때문입니다.

그러므로 셧다운 직전까지 ob_start()가 풀리면 안됩니다.

그러므로 라이믹스에서 ob_end_clean()을 할때 2번은 남겨두고 해야합니다.

이와 관련해서 수정해야 할 곳은 

 

classes/display/DisplayHandler.class.php 134라인

common/framework/debug.php 658라인

modules/file/file.controller.php 522라인

 

이렇게 3곳을 고치시면 됩니다.

 

while (ob_get_level())

 

이렇게 되어 있는 코드를

 

while (ob_get_level() > 2)

 

이렇게 고치시면 라이믹스에서도 이 라이브러리를 사용해서 로그를 출력하실 수 있습니다.

라이믹스 소스 구조 파악 같은거 해보실 분은 유용하게 사용하실 수 있을겁니다.

 

그냥 라이믹스의 index.php 에다가 require_once 한번 해놓으시면

이후 라이믹스 소스 어디에서든 로그 출력이 가능해집니다.

모듈같은거 소스 구조 파악하기에도 아주 좋습니다.