Skip to content

Commit d7f1cac

Browse files
committed
feat(logger): support for logger configuration
1 parent e0d3fad commit d7f1cac

File tree

5 files changed

+51
-2
lines changed

5 files changed

+51
-2
lines changed

.github/workflows/bench.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,6 @@ jobs:
3434

3535
- name: "Bench w/ Basic Authentication"
3636
run: ./scripts/bench.sh '--username "john" --password "appleseed"'
37+
38+
- name: "Bench w/ Logger"
39+
run: ./scripts/bench.sh '--logger'

src/cli.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ pub struct Cli {
5151
/// Specifies password for basic authentication
5252
#[structopt(long = "password")]
5353
pub password: Option<String>,
54+
/// Prints HTTP request and response details to stdout
55+
#[structopt(long = "logger")]
56+
pub logger: bool,
5457
}
5558

5659
impl Cli {
@@ -75,6 +78,7 @@ impl Default for Cli {
7578
gzip: false,
7679
username: None,
7780
password: None,
81+
logger: false,
7882
}
7983
}
8084
}
@@ -228,4 +232,14 @@ mod tests {
228232

229233
assert_eq!(from_args, expect);
230234
}
235+
236+
#[test]
237+
fn with_logger() {
238+
let from_args = Cli::from_str_args(vec!["http-server", "--logger"]);
239+
let mut expect = Cli::default();
240+
241+
expect.logger = true;
242+
243+
assert_eq!(from_args, expect);
244+
}
231245
}

src/config/file.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ pub struct ConfigFile {
2222
pub cors: Option<CorsConfig>,
2323
pub compression: Option<CompressionConfig>,
2424
pub basic_auth: Option<BasicAuthConfig>,
25+
pub logger: Option<bool>,
2526
}
2627

2728
impl ConfigFile {
@@ -82,11 +83,12 @@ mod tests {
8283

8384
root_dir.push("./fixtures");
8485

86+
assert!(config.logger.is_none());
87+
assert!(config.compression.is_none());
8588
assert_eq!(config.host, host);
8689
assert_eq!(config.port, port);
8790
assert_eq!(config.verbose, Some(true));
8891
assert_eq!(config.root_dir, Some(root_dir));
89-
assert_eq!(config.compression, None);
9092
}
9193

9294
#[test]
@@ -279,4 +281,16 @@ mod tests {
279281
assert_eq!(basic_auth.username, String::from("johnappleseed"));
280282
assert_eq!(basic_auth.password, String::from("john::likes::apples!"));
281283
}
284+
285+
#[test]
286+
fn parses_config_with_logger() {
287+
let file_contents = r#"
288+
host = "0.0.0.0"
289+
port = 7878
290+
logger = true
291+
"#;
292+
let config = ConfigFile::parse_toml(file_contents).unwrap();
293+
294+
assert_eq!(config.logger, Some(true));
295+
}
282296
}

src/config/mod.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ pub struct Config {
3030
cors: Option<CorsConfig>,
3131
compression: Option<CompressionConfig>,
3232
basic_auth: Option<BasicAuthConfig>,
33+
logger: Option<bool>,
3334
}
3435

3536
impl Config {
@@ -68,6 +69,10 @@ impl Config {
6869
pub fn basic_auth(&self) -> Option<BasicAuthConfig> {
6970
self.basic_auth.clone()
7071
}
72+
73+
pub fn logger(&self) -> Option<bool> {
74+
self.logger
75+
}
7176
}
7277

7378
impl Default for Config {
@@ -87,6 +92,7 @@ impl Default for Config {
8792
cors: None,
8893
compression: None,
8994
basic_auth: None,
95+
logger: None,
9096
}
9197
}
9298
}
@@ -137,6 +143,12 @@ impl TryFrom<Cli> for Config {
137143
None
138144
};
139145

146+
let logger = if cli_arguments.logger {
147+
Some(true)
148+
} else {
149+
None
150+
};
151+
140152
Ok(Config {
141153
host: cli_arguments.host,
142154
port: cli_arguments.port,
@@ -147,6 +159,7 @@ impl TryFrom<Cli> for Config {
147159
cors,
148160
compression,
149161
basic_auth,
162+
logger,
150163
})
151164
}
152165
}
@@ -177,6 +190,7 @@ impl TryFrom<ConfigFile> for Config {
177190
cors: file.cors,
178191
compression: file.compression,
179192
basic_auth: file.basic_auth,
193+
logger: file.logger,
180194
})
181195
}
182196
}

src/server/middleware/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,11 @@ impl TryFrom<Arc<Config>> for Middleware {
121121
}
122122
}
123123

124-
middleware.after(make_logger_middleware());
124+
if let Some(should_log) = config.logger() {
125+
if should_log {
126+
middleware.after(make_logger_middleware());
127+
}
128+
}
125129

126130
Ok(middleware)
127131
}

0 commit comments

Comments
 (0)