170 похожих чатов

Коллеги, вопросик. А как реализовать логгер response body, но при

этом удалить оттуда часть полей? Есть что-то готовое, что может скажем на 20к rps работать без особых проблем...?

17 ответов

32 просмотра

Мне тоже интересно кста

А вы точно смогли сделать такой логгер? А что если вы возвращаете файл или 1000 объектов каждый раз? У вас бесконечные диски для логов?

@IlyaKaznacheev @onokonem help дядьки

Что значит "смогли сделать"? Перечитайте вопрос) Диски как раз не бесконечные, поэтому и вопрос. Ну и плюс секурность местами.

Александр Костюченко
Что значит "смогли сделать"? Перечитайте вопрос) ...

Просто не печатать response, на кой хрен он нужен в логах.

Vadim
Просто не печатать response, на кой хрен он нужен ...

Я говорю это так как сам делал логгер, который скрывал сенсетианые данные, толкну от этого респонса просто нет.

Александр Костюченко
@IlyaKaznacheev @onokonem help дядьки

А что вам надо, секреты вырезать? Это можно на уровне коллектора сделать, но не факт, что столько потянет

Ilya Kaznacheev
А что вам надо, секреты вырезать? Это можно на уро...

Да, секреты и часть тяжёлых полей. Я не пробовал, но мне кажется проц и гц захлебнутся

Александр Костюченко
Да, секреты и часть тяжёлых полей. Я не пробовал, ...

Ну мне кажется что в такой постановке они в любом месте захлебнутся. Попробуйте пойти от обратного, и логгировать только нужные поля. Если у вас 20К рпс, вряд ли кто-то будет сидеть и читать все поля в каждом запросе

Ilya Kaznacheev
Ну мне кажется что в такой постановке они в любом ...

Вы всё верно говорите. А какой алгоритм получится этого всего? Ну т.е хендлер записал бади во writer,а что дальше...?

Не знаю

Можно попробовать обрабатывать и логировать ответ nginx. Очень любопытно: какая цель логирования всех ответов?

В общем, более-менее тривиально если нет запроса на риалтайм. Встроится каким-нибудь интерцептором или мидлтварью в точку, где TLS уже отработал, проверить размер тела по заголовку и если он попадает в ожидаемые границы, то асинхронно считать его до конца, сжать и сложить в опративку. Далее по таймеру или по наполнению регулярно дампить эти данные - куда не суть важно, значимеем батчинг, чтобы размер батча бодро бежал по проводам. Не забыть реализовать backoff: если буфер уже полный и не успевает дампиться, то, например, просто выбрасывать самые старые сообщения и использовать новые (для чего складывать бы изначально неплохо в какое-то дерево, типа BST с приколами). Синхронизировать через RWLock.

The Zazaeil
В общем, более-менее тривиально если нет запроса н...

Другой типичный вариант: иметь два буфера (текущий, прежний) и атомарно менять ссылку между ними. Прежний буфер сериализовать и дампить, это если надо оптимизировать под быструю запись без конфликтов с чтением. Тут бэкофф будет сложнее чуть, а само переключение надо сделать через atomix exchange.

эту статью видели? https://dev.to/mizutani/zlog-secure-logger-in-go-to-prevent-output-of-sensitivesecret-values-394d

Максим Федоров
эту статью видели? https://dev.to/mizutani/zlog-...

сложность именно в неопределенном теле респонса?

Кафка не подходит?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта