log4rs error Log4rs (Os {code: 2, kind: NotFound, сообщение: «Нет такого файла или каталога»}) - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь реализовать log4rs, следуя документам .Моя цель - поместить результат info!("INFO") в файл reports.log, но я получаю сообщение об ошибке:

thread 'main' в панике '' называется Result::unwrap() для значения Err: Log4rs (Os {код: 2, вид: NotFound, сообщение: «Нет такого файла или каталога»}) ', libcore / result.rs: 945: 5

У меня есть следующие файлы впапка src:

- main.rs
- log4rs.yml
- requests.log

main.rs:

#[macro_use]
extern crate log;
extern crate log4rs;

fn main() {
    println!("Hello, world!");
    log4rs::init_file("log4rs.yml", Default::default()).unwrap();
    info!("INFO");
}

файл конфигурации log4rs.yml:

# Scan this file for changes every 30 seconds
refresh_rate: 30 seconds

appenders:
  # An appender named "stdout" that writes to stdout
  stdout:
    kind: console

  # An appender named "requests" that writes to a file with a custom pattern encoder
  requests:
    kind: file
    path: "requests.log"
    encoder:
      pattern: "{d} - {m}{n}"

# Set the default logging level to "warn" and attach the "stdout" appender to the root
root:
  level: warn
  appenders:
    - stdout

loggers:
  # Raise the maximum log level for events sent to the "app::backend::db" logger to "info"
  app::backend::db:
    level: info

  # Route log events sent to the "app::requests" logger to the "requests" appender,
  # and *not* the normal appenders installed at the root
  app::requests:
    level: info
    appenders:
      - requests
    additive: false

1 Ответ

0 голосов
/ 20 мая 2018

Когда вы набираете cargo run, ваш рабочий каталог является текущим каталогом.Это означает, что все ваши относительные пути будут зависеть от этого рабочего каталога.

Например, если вы находитесь в своем домашнем каталоге (~) и у вас есть папка проекта с именем foo.Когда вы входите в это, это дает вам ~/foo.Если вы сейчас наберете cargo run, это означает, что когда log4rs пытается открыть ваш файл, он попытается открыть файл ~/foo/log4rs.yml.Файл не здесь, но в ~/foo/src/log4rs.yml

У вас есть много решений:

  • log4rs::init_file("src/log4rs.yml", Default::default()).unwrap();
  • переместить log4rs.yml в foo
  • использовать абсолютный путь (не очень хорошее решение для вашего текущего случая)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...