簡體   English   中英

將日志與 Rocket 一起使用時,在此 scope 中找不到宏“日志”

[英]Cannot find macro `log` in this scope when using log with Rocket

我在嘗試使用工作區 package 中的日志箱時遇到編譯器錯誤。 工作區中的其他板條箱正在毫無問題地使用日志記錄。

貨物.toml:

[dependencies]
log = "^0"
rocket = "^0"

[dependencies.uuid]
version = "^0"
features = ["v4"]

庫.rs:

#![feature(proc_macro_hygiene, decl_macro)]

use rocket::{
    Request, 
    Data, 
    Response
};

use rocket::request::{
    self, 
    FromRequest,
    Outcome
};

use rocket::fairing::{
    Fairing, 
    Info, 
    Kind
};

use uuid::Uuid;

use std::fmt;

use log;



pub struct LoggerFairing {
    service_name: &'static str
}


impl LoggerFairing {
    pub fn new(service_name: &'static str) -> Self {
        LoggerFairing {
            service_name
        }
    }
}


impl Fairing for LoggerFairing {
    fn info(&self) -> Info {
        Info {
            name: self.service_name,
            kind: Kind::Request | Kind::Response
        }
    }


    fn on_request(&self, req: &mut Request, _: &Data) {
        let ip_addr = req.client_ip().map(|addr| addr.to_string())
            .unwrap_or("IP Address unknown".to_string());

        let method = req.method();

        let url = req.uri();

        let request_id = get_request_id(req);

        log::info!("request {:?} from {}: {} {}", request_id, ip_addr, method, url);
    }


    fn on_response(&self, req: &Request, res: &mut Response) {
        let request_id = get_request_id(req);

        let status = res.status();

        log::info!("request {:?} responded with {}", request_id, status);
    }
}


fn get_request_id<'t, 'r>(req: &'t Request<'r>) -> Option<RequestId<'t>> {
    match req.guard::<RequestId>() {
        Outcome::Success(request_id) => Some(request_id),
        _ => None
    }
}



pub struct RequestId<'t> {
    pub id: &'t Uuid
}    


impl<'t, 'r> FromRequest<'t, 'r> for RequestId<'t> {
    type Error = ();
    
    fn from_request(req: &'t Request<'r>) -> request::Outcome<Self, Self::Error> {
        let id = req.local_cache(|| Uuid::new_v4());
        
        request::Outcome::Success(RequestId {
            id
        })
    }
}


impl<'t> fmt::Display for RequestId<'t> {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "{}", self.id)
    }
}

錯誤信息:

error: cannot find macro `log` in this scope
  --> utils\logging\src\lib.rs:62:9
   |
62 |         log::info!("request {:?} from {}: {} {}", request_id, ip_addr, method, url);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

error: cannot find macro `log` in this scope
  --> utils\logging\src\lib.rs:71:9
   |
71 |         log::info!("request {:?} responded with {}", request_id, status);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to 2 previous errors

error: could not compile `logging`.

我已經使用了use log語句的幾種變體以及我如何調用info! 宏,但它們都會導致相同的錯誤消息。 我試過在 Cargo.toml 中指定確切的版本。

我很難過。 這正是我在其他板條箱中使用登錄的方式。

在 Cargo.toml 中指定日志箱 (0.4.11) 的確切版本可以修復此問題。

我假設當 Cargo 試圖解決依賴關系時會發生一些有趣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM