2017-10-27 24 views
0

상황 : 내 Symfony2.8의 API에서Symfony2 독백 로거 사용자 정의 필드

, 나는 몇 가지 편리한 정보를 추가하는 독백에 대한 사용자 정의 RecordProcessor 가지고 :

my_api.logger.formatter: 
    class: Monolog\Formatter\LineFormatter 
    arguments: 
     - "[%%datetime%%] [%%extra.request_id%%] [%%extra.ip%%] [%%extra.user%%] %%channel%%.%%level_name%%: %%message%% %%context%%\n" 

을 보시다시피, 전 컨트롤러 (web/app.php)의 요청 헤더에 고유 한 실행 인 Uuid (request_id)를 요청할 때마다 (모든 관례대로) 추가합니다.

[2017-10-27 13:11:24] [7e1666b7] [79.XX.XX.XX] [[email protected]] app.INFO: OutGoing GET ... 
[2017-10-27 13:11:24] [15ded457] [11.XX.XX.XX] [[email protected]] security.DEBUG: ... 
[2017-10-27 13:11:24] [15ded457] [11.XX.XX.XX] [[email protected]] security.DEBUG: ... 
[2017-10-27 13:11:24] [15ded457] [11.XX.XX.XX] [[email protected]] app.INFO: Incoming POST ... 
[2017-10-27 13:11:24] [15ded457] [44.XX.XX.XX] [[email protected]] app.INFO: Asynchronous : SENDING message .... 

내가 비동기 무거운 로직 처리를위한 rabbitmq-번들 phpamqplib와 rabbitmq를 사용 : 그래서 여기 내 로그 라인처럼 보일 것입니다. 이것은 symfony 명령 (그리고 rabbitmq-supervisord-bundle) 덕택에 시작된 rabbitmq 소비자와 함께 작동합니다. 이 rabbitmq 사용자는 앱의 공통 로그 파일 (/var/log/env.log)에 항목을 기록합니다.

문제 :

내가 프로세스가 자연에 의해 비동기, 일부 비동기 프로세스가 다른 비동기 프로세스를 시작으로, 심포니 명령의 consummer 프로세스 (의 로그 라인에 UNIQUE_ID를 추가하고 싶습니다 로그 파일을 읽을 수 없습니다 ...). 어떻게 그렇게합니까? 나는 monolog 핸들러에 관한 많은 의사를 찾았지만 그것이 내가 찾던 것이 아닌 것 같다. 나 또한 stack_request (고전적인 http 특성에서와 같이)에 pushed 내 uniqueId 헤더와 가짜 요청을 만들려고했는데,이 못 생기고 너무 어리석은 보인다.

적으로는, 내가 내 추상적 인 GenericMyAppConsumer.php에서 이렇게 싶습니다

//Constructor of any consumers (sf command) 
//... 
$this->container->get('logger')->setData('extra.request_id', $this->uniqueId); 

는 그래서 모든 현재의 thread 로깅에 사용됩니다.

나는 분명히하고 싶다. 감사합니다. .

+0

Monolog에는 Symfony 설정의 로거에 첨부 할 수있는 UidProcessor가 있습니다. - https://symfony.com/doc/current/logging/processors.html –

+0

그래,하지만 세션에서 가져온 것입니다. sf 명령 exec 컨텍스트가 아닙니다. 게다가, 나는이 ID의 생성을 제어 할 수 있기를 원했고 SF 요청 exec 계획에서 가능한 한 빨리 설정되기를 원했습니다. – bohr

+0

자신의 프로세서를 작성하여 넣을 수 있지만 처음 로그 이벤트가 작성되기 바로 전에 생성해야합니다. –

답변

1

좋아요, 요청 헤더에 요청 ID가없는 경우 컨테이너를 인식하는 Monolog Processor에서 직접 현재 요청을 설정했습니다. 그게 전부는 아니지만 다른 방법은 안 보여.