Skip to content

Commit 0bd964a

Browse files
authored
Merge pull request #495 from http-rs/logger
init default logger
2 parents 4328aae + 0fab210 commit 0bd964a

File tree

6 files changed

+70
-43
lines changed

6 files changed

+70
-43
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ async-h1 = { version = "1.1.2", optional = true }
3434
async-sse = "2.1.0"
3535
async-std = { version = "1.4.0", features = ["unstable"] }
3636
cookie = { version = "0.12.0", features = ["percent-encode"]}
37+
femme = "2.0.1"
3738
http-types = "1.0.1"
3839
kv-log-macro = "1.0.4"
3940
mime = "0.3.14"
@@ -42,7 +43,6 @@ route-recognizer = "0.1.13"
4243
serde = "1.0.102"
4344
serde_json = "1.0.41"
4445
serde_qs = "0.5.0"
45-
femme = "1.3.0"
4646

4747
[dev-dependencies]
4848
async-std = { version = "1.4.0", features = ["unstable", "attributes"] }

examples/hello.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
use async_std::task;
2-
3-
fn main() -> Result<(), std::io::Error> {
4-
task::block_on(async {
5-
let mut app = tide::new();
6-
app.at("/").get(|_| async move { Ok("Hello, world!") });
7-
app.listen("127.0.0.1:8080").await?;
8-
Ok(())
9-
})
1+
#[async_std::main]
2+
async fn main() -> Result<(), std::io::Error> {
3+
tide::log::start();
4+
let mut app = tide::new();
5+
app.at("/").get(|_| async move { Ok("Hello, world!") });
6+
app.listen("127.0.0.1:8080").await?;
7+
Ok(())
108
}

examples/static_file.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
1-
use async_std::task;
2-
use tide::log;
3-
4-
fn main() -> Result<(), std::io::Error> {
5-
femme::start(log::Level::Info.to_level_filter()).unwrap();
6-
task::block_on(async {
7-
let mut app = tide::new();
8-
app.at("/").get(|_| async move { Ok("visit /src/*") });
9-
app.at("/src").serve_dir("src/")?;
10-
app.listen("127.0.0.1:8080").await?;
11-
Ok(())
12-
})
1+
#[async_std::main]
2+
async fn main() -> Result<(), std::io::Error> {
3+
tide::log::start();
4+
let mut app = tide::new();
5+
app.at("/").get(|_| async move { Ok("visit /src/*") });
6+
app.at("/src").serve_dir("src/")?;
7+
app.listen("127.0.0.1:8080").await?;
8+
Ok(())
139
}

src/log/middleware.rs

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,29 +31,45 @@ impl LogMiddleware {
3131
) -> crate::Result {
3232
let path = ctx.uri().path().to_owned();
3333
let method = ctx.method().to_string();
34-
log::trace!("IN => {} {}", method, path);
34+
log::info!("<-- Request received", {
35+
method: method,
36+
path: path,
37+
});
3538
let start = std::time::Instant::now();
3639
match next.run(ctx).await {
3740
Ok(res) => {
3841
let status = res.status();
39-
log::info!(
40-
"{} {} {} {}ms",
41-
method,
42-
path,
43-
status,
44-
start.elapsed().as_millis()
45-
);
42+
if status.is_server_error() {
43+
log::error!("--> Response sent", {
44+
method: method,
45+
path: path,
46+
status: status as u16,
47+
duration: format!("{}ms", start.elapsed().as_millis()),
48+
});
49+
} else if status.is_client_error() {
50+
log::warn!("--> Response sent", {
51+
method: method,
52+
path: path,
53+
status: status as u16,
54+
duration: format!("{}ms", start.elapsed().as_millis()),
55+
});
56+
} else {
57+
log::info!("--> Response sent", {
58+
method: method,
59+
path: path,
60+
status: status as u16,
61+
duration: format!("{}ms", start.elapsed().as_millis()),
62+
});
63+
}
4664
Ok(res)
4765
}
4866
Err(err) => {
49-
let msg = err.to_string();
50-
log::error!(
51-
"{} {} {} {}ms",
52-
msg,
53-
method,
54-
path,
55-
start.elapsed().as_millis()
56-
);
67+
log::error!("{}", err.to_string(), {
68+
method: method,
69+
path: path,
70+
status: err.status() as u16,
71+
duration: format!("{}ms", start.elapsed().as_millis()),
72+
});
5773
Err(err)
5874
}
5975
}

src/log/mod.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
//! ```no_run
66
//! use tide::log;
77
//!
8-
//! // `tide::log` requires starting a third-party logger such as `femme`. We may
9-
//! // ship such a logger as part of Tide in the future.
10-
//! femme::start(log::Level::Info.to_level_filter()).unwrap();
8+
//! log::start();
119
//!
1210
//! log::info!("Hello cats");
1311
//! log::debug!("{} wants tuna", "Nori");
@@ -23,4 +21,17 @@ pub use kv_log_macro::{max_level, Level};
2321

2422
mod middleware;
2523

24+
pub use femme::LevelFilter;
2625
pub use middleware::LogMiddleware;
26+
27+
/// Start logging.
28+
pub fn start() {
29+
femme::start();
30+
crate::log::info!("Logger started", { level: "Info" });
31+
}
32+
33+
/// Start logging with a log level.
34+
pub fn with_level(level: LevelFilter) {
35+
femme::with_level(level);
36+
crate::log::info!("Logger started", { level: format!("{}", level) });
37+
}

src/server.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,15 @@ impl<State: Send + Sync + 'static> Server<State> {
283283
let listener = async_std::net::TcpListener::bind(addr).await?;
284284

285285
let addr = format!("http://{}", listener.local_addr()?);
286-
log::info!("Server is listening on: {}", addr);
287-
let mut incoming = listener.incoming();
286+
let tls = false;
287+
let target = if cfg!(debug_assertions) {
288+
"dev"
289+
} else {
290+
"release"
291+
};
292+
log::info!("Server listening", { address: addr, target: target, tls: tls });
288293

294+
let mut incoming = listener.incoming();
289295
while let Some(stream) = incoming.next().await {
290296
let stream = stream?;
291297
let addr = addr.clone();

0 commit comments

Comments
 (0)