From a2a2b8965310976d4dcdc44e9a19feb88b8254b6 Mon Sep 17 00:00:00 2001 From: Jose Quintana Date: Tue, 24 May 2022 09:52:07 +0200 Subject: [PATCH] refactor: log request feature optional via '--log-remote-address` --- docs/content/configuration/config-file.md | 10 ++++++++++ src/handler.rs | 14 ++++++++++---- src/server.rs | 5 +++++ src/settings/cli.rs | 9 +++++++++ src/settings/file.rs | 2 ++ src/settings/mod.rs | 5 +++++ tests/toml/config.toml | 15 ++++++++++++++- 7 files changed, 55 insertions(+), 5 deletions(-) diff --git a/docs/content/configuration/config-file.md b/docs/content/configuration/config-file.md index 8346e08..9d827e7 100644 --- a/docs/content/configuration/config-file.md +++ b/docs/content/configuration/config-file.md @@ -60,6 +60,16 @@ grace-period = 0 #### Page fallback for 404s # page-fallback = "some_page.html" +#### Log request Remote Address if available +log-remote-address = false + + +### Windows Only + +#### Run the web server as a Windows Service +# windows-service = false + + [advanced] diff --git a/src/handler.rs b/src/handler.rs index bb311b4..dbb7905 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -20,6 +20,7 @@ pub struct RequestHandlerOpts { pub page50x: Vec, pub page_fallback: Vec, pub basic_auth: String, + pub log_remote_address: bool, // Advanced options pub advanced_opts: Option, @@ -46,16 +47,21 @@ impl RequestHandler { let uri_query = uri.query(); let dir_listing = self.opts.dir_listing; let dir_listing_order = self.opts.dir_listing_order; + let log_remote_addr = self.opts.log_remote_address; let mut cors_headers: Option = None; - // Log request information with its remote address - let remote_addr = remote_addr.map_or("".to_owned(), |v| v.to_string()); + // Log request information with its remote address if available + let mut remote_addr_str = String::new(); + if log_remote_addr { + remote_addr_str.push_str(" remote_addr="); + remote_addr_str.push_str(&remote_addr.map_or("".to_owned(), |v| v.to_string())); + } tracing::info!( - "incoming request: method={} uri={} remote_addr={}", + "incoming request: method={} uri={}{}", method, uri, - remote_addr, + remote_addr_str, ); async move { diff --git a/src/server.rs b/src/server.rs index 77f469b..4b4d650 100644 --- a/src/server.rs +++ b/src/server.rs @@ -162,6 +162,10 @@ impl Server { !general.basic_auth.is_empty() ); + // Log remote address option + let log_remote_address = general.log_remote_address; + tracing::info!("log remote address: enabled={}", log_remote_address); + // Grace period option let grace_period = general.grace_period; tracing::info!("grace period before graceful shutdown: {}s", grace_period); @@ -180,6 +184,7 @@ impl Server { page50x, page_fallback, basic_auth, + log_remote_address, advanced_opts, }), }); diff --git a/src/settings/cli.rs b/src/settings/cli.rs index 9f2a033..f062165 100644 --- a/src/settings/cli.rs +++ b/src/settings/cli.rs @@ -170,6 +170,15 @@ pub struct General { /// Server TOML configuration file path. pub config_file: Option, + #[structopt( + long, + parse(try_from_str), + default_value = "false", + env = "SERVER_LOG_REMOTE_ADDRESS" + )] + /// Log incoming requests information along with its remote address if available using the `info` log level. + pub log_remote_address: bool, + // // Windows specific arguments and commands // diff --git a/src/settings/file.rs b/src/settings/file.rs index d0b565c..22be141 100644 --- a/src/settings/file.rs +++ b/src/settings/file.rs @@ -96,6 +96,8 @@ pub struct General { pub grace_period: Option, pub page_fallback: Option, + + pub log_remote_address: Option, } /// Full server configuration diff --git a/src/settings/mod.rs b/src/settings/mod.rs index dcb3707..4b793de 100644 --- a/src/settings/mod.rs +++ b/src/settings/mod.rs @@ -61,6 +61,7 @@ impl Settings { let mut threads_multiplier = opts.threads_multiplier; let mut grace_period = opts.grace_period; let mut page_fallback = opts.page_fallback; + let mut log_remote_address = opts.log_remote_address; // Define the advanced file options let mut settings_advanced: Option = None; @@ -145,6 +146,9 @@ impl Settings { if let Some(v) = general.page_fallback { page_fallback = Some(v) } + if let Some(v) = general.log_remote_address { + log_remote_address = v + } } // Prepare the "advanced" options @@ -206,6 +210,7 @@ impl Settings { threads_multiplier, grace_period, page_fallback, + log_remote_address, // NOTE: // Windows-only options and commands diff --git a/tests/toml/config.toml b/tests/toml/config.toml index 51de796..47ff090 100644 --- a/tests/toml/config.toml +++ b/tests/toml/config.toml @@ -45,6 +45,19 @@ grace-period = 0 #### Page fallback for 404s page-fallback = "" +#### Page fallback for 404s +page-fallback = "" + +#### Log request Remote Address if available +log-remote-address = false + + +### Windows Only + +#### Run the web server as a Windows Service +# windows-service = false + + [advanced] #### HTTP Headers customization @@ -56,7 +69,7 @@ headers = { Access-Control-Allow-Origin = "*", X-XSS-PROTECTION = "1; mode=block # #### b. Multiline version [[advanced.headers]] -source = "index.html" +source = "/index.html" [advanced.headers.headers] Cache-Control = "public, max-age=36000" Content-Security-Policy = "frame-ancestors 'self'" -- libgit2 1.7.2