Size: a a a

Rust — русскоговорящее сообществo

2020 September 28

KB

Kirill Bulatov in Rust — русскоговорящее сообществo
Как вы в асинхронных Rust бекендах отделяете логи одного запроса от другого?
Может, есть какие-нибудь крейты для log?
источник

VS

Vladimir SHCHerba in Rust — русскоговорящее сообществo
Kirill Bulatov
Как вы в асинхронных Rust бекендах отделяете логи одного запроса от другого?
Может, есть какие-нибудь крейты для log?
Глянь как в substrate логи работают, они там красивые.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Kirill Bulatov
Как вы в асинхронных Rust бекендах отделяете логи одного запроса от другого?
Может, есть какие-нибудь крейты для log?
источник

V

Vladimir in Rust — русскоговорящее сообществo
Vladimir SHCHerba
Глянь как в substrate логи работают, они там красивые.
там стоит проблема ассинхронности в логах?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Это как лог, но структирированный, то есть события вкладываются в древовидную систему спанов.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Один запрос - один спан. И тогда запросы между собой не путаются, потому что они различимы по родительскому спану.
источник

V

Vladimir in Rust — русскоговорящее сообществo
tracing наверное круто, но мы делали проще - по факту просто добавляли контекста в логи, например это может быть переменная request_id="xx";
и после уже в elastic search можно было фильтровать данные с одним или другим id.
источник

KB

Kirill Bulatov in Rust — русскоговорящее сообществo
А можно пример, как именно там для спана вывести доп uuid какой?
А то именно в логах ничего не меняется по сравнению с log, я крутил даже.
источник

KB

Kirill Bulatov in Rust — русскоговорящее сообществo
Vladimir
tracing наверное круто, но мы делали проще - по факту просто добавляли контекста в логи, например это может быть переменная request_id="xx";
и после уже в elastic search можно было фильтровать данные с одним или другим id.
Вот мне такое нужно, да.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Kirill Bulatov
А можно пример, как именно там для спана вывести доп uuid какой?
А то именно в логах ничего не меняется по сравнению с log, я крутил даже.
Ну например, если обработка запроса вложена в функцию, то ставим на нее атрибут
#[instrument(fields(request_id = request.id))]
fn handler(request: ...) {
  ...
}
источник

KB

Kirill Bulatov in Rust — русскоговорящее сообществo
Mikail Bagishov
Ну например, если обработка запроса вложена в функцию, то ставим на нее атрибут
#[instrument(fields(request_id = request.id))]
fn handler(request: ...) {
  ...
}
Аа, понял, везде писать нужно.
Я-то думал, как в Java mdc можно — забил в местный асинхронный аналог thread local значение один раз вверху стека и оно само пишется потом.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Kirill Bulatov
Аа, понял, везде писать нужно.
Я-то думал, как в Java mdc можно — забил в местный асинхронный аналог thread local значение один раз вверху стека и оно само пишется потом.
Наоборот, номер запроса один раз добавляется в спан. Дальше все дочерние спаны и события его отнаследуют.
источник

KB

Kirill Bulatov in Rust — русскоговорящее сообществo
Mikail Bagishov
Наоборот, номер запроса один раз добавляется в спан. Дальше все дочерние спаны и события его отнаследуют.
Тогда вообще шикарно, видимо, что-то я не так крутил, пойду ещё, спасибо.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
В случае синхронной функции дочерние = вниз по стеку
Асинхронной = исполняются, пока поллится футуры от текущей функции
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Кто-нибудь в теме почему у VecDeque нет drain_filter?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Наверное, его просто не сделали.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Странно что я даже issue не смог найти...

Ну штож, буду по старинке на циклах руками костылять 😐
источник

Э

Эрик in Rust — русскоговорящее сообществo
вафель 🧇
Кто-нибудь в теме почему у VecDeque нет drain_filter?
Ты исходники Drop у векторного читал?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Ты исходники Drop у векторного читал?
Хм, читаю исходники Drop (https://doc.rust-lang.org/stable/src/alloc/vec.rs.html#3082-3127), не вижу препятствий.
источник

Э

Эрик in Rust — русскоговорящее сообществo
У вектора и листа относительно простое вынимание элементов. У VecDeque оно сложнее.
источник