Журнал запросов и ответов для всех благотворительных серверов - PullRequest
0 голосов
/ 19 апреля 2020

У меня работает несколько благотворительных серверов. В порядке требований я хотел бы сделать следующее:

  1. Если возможно, распечатать метод запроса, параметры запроса и время, когда запрос был сделан. Кроме того, выведите время ответа для данного вызова.
  2. Если вышеописанное невозможно, просто напечатайте метод запроса и метод ответа вместе с временными метками сценария.

Кажется, нет простого способа включить ведение журнала только для экземпляров запроса / ответа. Обратите внимание, что сервер написан / сгенерирован в Java. Буду признателен за любую помощь в том, как я могу настроить ведение журнала для этих серверов.

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Во-первых, существует механизм, называемый * Процессорные события , посмотрите на TServerEventHandler класс . Также должен быть пример того, кто его использует, вероятно, под /test/java.

. Вы также можете взглянуть на класс TProtocolDecorator для перехвата вызовов. TMultiplexedProtocol класс может служить примером того, как его использовать.

0 голосов
/ 20 апреля 2020

Чтобы получить все нужные вам функции, лучше всего просто обернуть сервис. Например, предположим, что у вас есть обработчик службы с функцией one() и функцией two(), обработчик службы оболочки будет реализовывать один и тот же интерфейс. Затем в обработчике службы оболочки вы могли бы сделать что-то вроде этого:

one() {
  print timestamp, method name and params
  call one() in real service
  print timestamp for call end
} 

...

Вы даже можете создать фабрику процессоров для оболочки, если вы хотите сгенерировать их для каждого клиента.

В качестве альтернативы вы могли бы реализовать ServerEventHandler, см .: https://github.com/apache/thrift/blob/master/lib/java/src/org/apache/thrift/server/TServerEventHandler.java

Они также вызываются для каждого запроса клиента (через метод processContext), но получение имени и параметров функции на уровне сервера было бы нетривиальным и метод processContext () вызывается только один раз, перед тем как вызывается обработчик, поэтому получение времени туда-обратно также будет непростым делом.

...