Как вы решаете различные задачи регистрации HTTP-запросов и вывода сообщений трассировки и ошибок более глубоко в вашем коде? - PullRequest
0 голосов
/ 30 октября 2019

Я читал о том, как выполнить ведение журнала HTTP-запросов в Actix с использованием промежуточного программного обеспечения для ведения журналов:

https://docs.rs/actix-web/1.0.0/actix_web/middleware/struct.Logger.html

Теперь скажите, что я хочу также добавить ведение журнала глубоко в мое приложение, используякаркас бревенчатого ящика. Например, мне нужны подробные трассировки для отладки и хорошее место для вывода сообщений о панике до того, как настоящая паника остановит мир. Поскольку через журнал можно настроить только один регистратор, это вызовет проблемы? Если я также хочу записать текущее имя пользователя или идентификатор сеанса вглубь, нужно ли его передавать полностью или же у Actix есть способ добиться этого глобально?

1 Ответ

0 голосов
/ 30 октября 2019

Вы можете использовать один и тот же регистратор для Actix-web и остальной части вашего приложения. Ключ заключается в том, чтобы различать вызовы макросов (trace !, debug !, info !, warn! И error!) Путем включения необязательного параметра target. Затем необходимо установить переменную среды RUST_LOG.

Пример вызова:

RUST_LOG="info,parser::expression=trace,actix_web=info" cargo run
  • actix_web предназначается для их кода и печатает информацию и сообщения более высокого уровня.
  • parser::expression предназначен для части моего кода и включает сообщения уровня трассировки.

В моем коде приведен пример сообщения трассировки:

    trace!(target: "parser::expression", "Tracing: {}", self.expression_source);

Если выпропустите параметр target, ваш путь к модулю становится целью по умолчанию, или, как говорят в документации, но каждое правописание, которое я использовал для пути к модулю, включая все больше и меньше частей, включая имя класса и т. д., завершается неудачей, поэтому яне понимаю документы. Задание его вручную работает, поэтому я так и делаю.

Также важно правильно настроить импорт ящика в файле Cargo.toml:

[dependencies]
log = { version = "0.4", features = ["max_level_trace", "release_max_level_warn", "std", "serde"] }

Вышеприведенные сообщения разрешают трассировкуна сборке dev, но только предупреждения на сборке релиза. Компилятор отбрасывает код во время компиляции, поэтому изменение переменной среды во время выполнения не окажет влияния на такого рода изменения.

Вот некоторая полезная документация:

https://rust -lang-nursery.github.io / ржавчины поваренной / development_tools / отладки / config_log.html

...