2013-08-09 9 views
0

Java 백그라운드에서 왔기 때문에 log4j, logbackslf4j과 같은 프레임 워크를 로깅하는 데 익숙합니다. 그러나 PHP 프로그래밍을 할 때 나는 echovar_dump/print_r을 사용하여 자기 자신을 발견하고 (보통) 내가 작업하고있는 웹 페이지에 로깅 정보를 작성한다. PHP에서도이 작업을 수행하는 더 좋은 방법이 있어야한다고 생각합니다. PHP 로깅을하는 관용적 인 방법은 무엇입니까?PHP에서 일반적인 로깅을 수행하는 관용적 인 방법은 무엇입니까?

나는 log4php을 만났으며, 일반적인 로깅 용도로도 error_log을 사용하도록 권장합니다. 문제를 더 복잡하게 만드는 것은 대개 내가 작성하는 PHP 코드가 대용량 시스템의 모듈이기 때문에 여러 모듈이 동일한 요청 내에서 실행될 수 있으며 로깅은 모듈별로 격리되어야합니다.

모든 의견과 제안을 부탁드립니다.

+0

https://github.com/Seldaek/monolog이 좋습니다. – lsouza

+0

PHP 5.3이 필요합니다. 저번 공연 이군. 5.2 이상에서 작동해야합니다. – NilsH

+0

아야 ... 가능하면 PHP를 적어도 5.4, 5.5로 업그레이드해야합니다. –

답변

1

저는 Log4PHP를 오랫동안 사용해 왔으며 적극 권장합니다. :)

그러나 적절한 로깅을하는 것에 대한 질문은 다소 어렵습니다. Log4PHP는 모두 동일한 로깅을 사용하는 여러 응용 프로그램이있는 엔터프라이즈 환경에서 사용되며 로거가 올바르게 구성되어 사용할 준비가되어 있다고 가정합니다. 기본적으로 매우 간단합니다. "같은 로깅을 모든 곳에서 사용할 수 있다고 가정합니다."

다른 사람들이 사용할 모듈을 개발하는 것은 완전히 다른 작업입니다. 당신은 아마도 당신 자신의 내부 로깅을 사용할 수 있지만 그 로그 메시지를 어디에 써야할까요? 모듈이 예기치 않게 하드 드라이브를 가득 채우면 나쁜 동작으로 간주 될 수 있습니다. 또한 모듈이 나머지 응용 프로그램이 로그온하는 대상에 로그하는 요구 사항이됩니다.

모듈의 크기가 너무 작 으면 다른 문제 (예 : 예외 발생 또는 false 반환 및 전용 오류 정보 기능 제공)로 오류 상황을 알릴 수 있기 때문에 로깅이 큰 문제는 아닐 수 있습니다.

모든 로깅 프레임 워크가 결국 구현할 수있는 공통 로거 인터페이스의 정의가 있습니다. PSR-3 그러나 두 가지 단점은이 솔루션을 사용할 수 없게 만듭니다. 1. Log4PHP는 현재 해당 인터페이스를 구현하지 않으며 2. 네임 스페이스를 사용합니다 PHP 5.3 이상이 필요합니다.

외부의 일반적인 로거를 받아 들일 수있는 방법이 모듈에 제공되어야합니다. 로거가 없으면 로거해서는 안됩니다. 로깅을 테스트하기를 원할 수도 있기 때문에, 모듈에 유니폼 인터페이스를 제공하고 모든 로거의 불쾌한 구현 차이를 캡슐화하는 래퍼가 있어야합니다. 모듈에 PSR-3-Wrapper 및 Log4PHP 래퍼를 제공하고 다른 로그 요구 사항에 대한 공개 요구에 대응하십시오.

+0

감사합니다. 훌륭한 답변입니다! 시스템에 "표준"로깅 메커니즘이 사용 되었다면, 필자는 그 시스템에 확실히 "연결"할 것입니다. 그러나 그렇지 않다면 다른 대안을 고려해야합니다. 로깅 문제는 주로 오류 상황을 추적하기위한 디버그 로깅과 모듈 사용자가 이러한 추적 (호출 된 웹 서비스 등의 결과)을보고하여 오류를 찾아내는 방법입니다. 어쩌면'죽을'것이거나 거짓을 돌려주는 것이 더 나을지 모르겠지만, 나는 문맥 적 정보를 많이 잃을 것이다. 그러나 다시 한번 PHP로는 경험이없는 것일 수도 있습니다. 그렇지 않으면 가능합니다. – NilsH

+0

모듈을 사용하는 저만의 경우 문제가되지 않습니다. 그러나 주요 목표는 문제가 발생할 때 모듈 사용자로부터 로그/추적을 수집하는 것이 가능하도록하는 것입니다. – NilsH

+0

경험이 거의없는 사용자가 어쨌든 로그 파일을 찾을 수 없습니다. 그러나 이런 경우 백그라운드 정보를 얻기 위해 로깅을위한 간단한 "즉시 스위치 온"솔루션이 필요할 것입니다. – Sven