Почему Rust не позволяет дважды инициализировать протоколирование во время выполнения? - PullRequest
0 голосов
/ 13 октября 2019

У меня есть набор контрольных тестов для тестирования инициализации и ведения журнала с помощью библиотек журналов. Но мой код паникует в тесте набора, хотя каждый тест может быть выполнен по отдельности, хорошо.

#[bench]
fn bench_fern_multi_unfiltered_line(b: &mut Bencher) {
    // Given: we initialize the config with the correct parameters
    init_fern();

    // When: we test enough iterations
    // Then: we should get performance numbers
    b.iter(|| {
        for i in 0..1000 {
            log_multi_info_lines()
        }
    });
}

#[bench]
fn bench_log4rs_single_unfiltered_line(b: &mut Bencher) {
    // Given: we initialize the config with the correct parameters
    init_log4rs();

    // When: we test enough iterations
    // Then: we should get performance numbers
    b.iter(|| {
        for i in 0..1000 {
            log_single_info_line()
        }
    });
}

Код работает нормально для любого первого данного теста в наборе, хотя затем он паникует по следующему:

---- tests::bench_log4rs_multi_unfiltered_line stdout ----
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: SetLoggerError(())', src\libcore\result.rs:1165:5

...

---- tests::bench_log4rs_single_unfiltered_line stdout ----
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: SetLoggerError(())', src\libcore\result.rs:1165:5

Код паникует, даже если я тестирую только 1 библиотеку за раз. Таким образом, это все еще происходит, когда вы пытаетесь сделать это дважды.

Возможно, существует обходной путь в отношении отмены текущей конфигурации ведения журнала бэкенда во время выполнения, но я хотел понять: почему Rust не допускает этого в своем текущемсостояние?

Версия Rustup + Rust:

active toolchain
----------------

nightly-x86_64-pc-windows-msvc (default)
rustc 1.40.0-nightly (2e7244807 2019-10-04)
...