feat: configurable logging levels (resolves #16)
Diff
.gitignore | 5 +++++
Makefile | 10 ++++++----
README.md | 2 ++
Tasks.Dev.toml | 3 +++
src/config.rs | 3 +++
src/logger.rs | 33 +++++++++++++++++++++++++++++++++
src/main.rs | 42 +++++++++---------------------------------
7 files changed, 61 insertions(+), 37 deletions(-)
@@ -6,5 +6,10 @@
**/*.bin
**/*.iml
**/.idea
**/*.txt
**/*.zip
**/*.tar.gz
**/*.tar
**/*.gz
**/.DS_Store
release
@@ -25,12 +25,14 @@ install:
.PHONY: install
run:
@rustc -vV
@cargo make --makefile Tasks.Dev.toml run
.PHONY: run
watch:
dev:
@rustc -vV
@cargo make --makefile Tasks.Dev.toml watch
.PHONY: watch
.PHONY: dev
build:
@rustc -vV
@@ -214,8 +216,8 @@ promote:
.PHONY: promote
loadtest:
@echo "GET http://localhost:1234" | \
vegeta -cpus=12 attack -workers=10 -duration=5s -connections=10000 -rate=200 -http2=false > results.bin
@echo "GET http://localhost:8787" | \
vegeta -cpus=12 attack -workers=10 -duration=60s -connections=10000 -rate=200 -http2=false > results.bin
@cat results.bin | vegeta report -type='hist[0,2ms,4ms,6ms]'
@cat results.bin | vegeta plot > plot.html
.PHONY: loadtest
@@ -41,6 +41,7 @@ Server can be configured either via environment variables or their equivalent co
@@ -64,6 +65,7 @@ OPTIONS:
Assets directory path for add cache headers functionality [env: SERVER_ASSETS=] [default: ./assets]
--host <host> Host address (E.g 127.0.0.1) [env: SERVER_HOST=] [default: [::]]
--log-level <log-level> Specify a logging level in lower case [env: SERVER_LOG_LEVEL=] [default: error]
--name <name> Name for server [env: SERVER_NAME=] [default: my-static-server]
--page404 <page404>
HTML file path for 404 errors. If path is not specified or simply don't exists then server will use a
@@ -1,6 +1,9 @@
[env]
E_ARGS = "--port=8787"
E_URL = "http://locahost"
SERVER_LOG_LEVEL = "trace"
SERVER_ROOT = "./public"
SERVER_ASSETS = "./assets"
[tasks.watch]
command = "cargo"
@@ -41,4 +41,7 @@ pub struct Options {
#[structopt(long, default_value = "", env = "SERVER_TLS_PKCS12_PASSWD")]
pub tls_pkcs12_passwd: String,
#[structopt(long, default_value = "error", env = "SERVER_LOG_LEVEL")]
pub log_level: String,
}
@@ -1,5 +1,38 @@
use chrono::Local;
use env_logger::Builder;
use iron::prelude::*;
use iron::AfterMiddleware;
use log::LevelFilter;
use std::io::Write;
pub fn init(log_level_str: &str) {
let log_level = match log_level_str {
"off" => LevelFilter::Off,
"error" => LevelFilter::Error,
"warn" => LevelFilter::Warn,
"info" => LevelFilter::Info,
"debug" => LevelFilter::Debug,
"trace" => LevelFilter::Trace,
_ => {
println!("Log level \"{}\" is not supported", log_level_str);
std::process::exit(1);
}
};
Builder::new()
.filter_level(log_level)
.format(|buf, record| {
writeln!(
buf,
"{} [{}] - {}",
Local::now().format("%Y-%m-%dT%H:%M:%S"),
record.level(),
record.args()
)
})
.init();
}
pub struct Logger;
@@ -1,15 +1,11 @@
extern crate chrono;
extern crate env_logger;
extern crate flate2;
extern crate hyper_native_tls;
extern crate iron;
extern crate iron_staticfile_middleware;
extern crate nix;
extern crate signal;
#[macro_use]
extern crate log;
extern crate structopt;
use crate::config::Options;
use hyper_native_tls::NativeTlsServer;
use iron::prelude::*;
use staticfiles::*;
use structopt::StructOpt;
mod config;
mod error_page;
@@ -18,16 +14,6 @@ mod logger;
mod signal_manager;
mod staticfiles;
use crate::config::Options;
use chrono::Local;
use env_logger::Builder;
use hyper_native_tls::NativeTlsServer;
use iron::prelude::*;
use log::LevelFilter;
use staticfiles::*;
use std::io::Write;
use structopt::StructOpt;
fn on_server_running(server_name: &str, proto: &str, addr: &str) {
info!(
@@ -46,20 +32,10 @@ fn on_server_running(server_name: &str, proto: &str, addr: &str) {
}
fn main() {
Builder::new()
.format(|buf, record| {
writeln!(
buf,
"{} [{}] - {}",
Local::now().format("%Y-%m-%dT%H:%M:%S"),
record.level(),
record.args()
)
})
.filter(None, LevelFilter::Info)
.init();
let opts = Options::from_args();
logger::init(&opts.log_level);
let addr = &format!("{}{}{}", opts.host.to_string(), ":", opts.port.to_string());
let proto = if opts.tls { "HTTPS" } else { "HTTP" };