refactor: log request feature optional via '--log-remote-address`
Diff
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(-)
@@ -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]
@@ -20,6 +20,7 @@ pub struct RequestHandlerOpts {
pub page50x: Vec<u8>,
pub page_fallback: Vec<u8>,
pub basic_auth: String,
pub log_remote_address: bool,
pub advanced_opts: Option<Advanced>,
@@ -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<http::HeaderMap> = None;
let remote_addr = remote_addr.map_or("".to_owned(), |v| v.to_string());
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 {
@@ -162,6 +162,10 @@ impl Server {
!general.basic_auth.is_empty()
);
let log_remote_address = general.log_remote_address;
tracing::info!("log remote address: enabled={}", log_remote_address);
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,
}),
});
@@ -170,6 +170,15 @@ pub struct General {
pub config_file: Option<PathBuf>,
#[structopt(
long,
parse(try_from_str),
default_value = "false",
env = "SERVER_LOG_REMOTE_ADDRESS"
)]
pub log_remote_address: bool,
@@ -96,6 +96,8 @@ pub struct General {
pub grace_period: Option<u8>,
pub page_fallback: Option<PathBuf>,
pub log_remote_address: Option<bool>,
}
@@ -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;
let mut settings_advanced: Option<Advanced> = 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
}
}
@@ -206,6 +210,7 @@ impl Settings {
threads_multiplier,
grace_period,
page_fallback,
log_remote_address,
@@ -45,6 +45,19 @@ grace-period = 0
page-fallback = ""
page-fallback = ""
log-remote-address = false
[advanced]
@@ -56,7 +69,7 @@ headers = { Access-Control-Allow-Origin = "*", X-XSS-PROTECTION = "1; mode=block
[[advanced.headers]]
source = "index.html"
source = "/index.html"
[advanced.headers.headers]
Cache-Control = "public, max-age=36000"
Content-Security-Policy = "frame-ancestors 'self'"