diff --git a/server/src/main.rs b/server/src/main.rs
index b86c60b..7dbddf3 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -9,7 +9,9 @@ use actix_web::{
     web, App, HttpServer,
 };
 use clap::Parser;
+use env_logger::{Env, WriteStyle};
 use handlebars::Handlebars;
+use log::LevelFilter;
 
 mod errors;
 mod main_pages;
@@ -28,8 +30,9 @@ struct Config {
     /// The address on which to listen
     address: SocketAddr,
     #[clap(long, action)]
-    /// Whether to start the server in dev mode; this enables some
-    /// nice handlebars features that are not intended for production
+    /// Whether to start the server in dev mode; this enables some nice
+    /// handlebars features that are not intended for production, and enables
+    /// more verbose logs
     dev_mode: bool,
 }
 
@@ -41,10 +44,25 @@ struct SharedData<'a> {
 
 #[actix_web::main]
 async fn main() -> std::io::Result<()> {
-    let mut config = Config::parse();
-    config.template_directory = config.template_directory.canonicalize()?;
+    let config = {
+        let mut config = Config::parse();
+        config.template_directory = config.template_directory.canonicalize()?;
+        config
+    };
 
-    env_logger::init();
+    env_logger::Builder::new()
+        .filter_level(if config.dev_mode {
+            LevelFilter::Info
+        } else {
+            LevelFilter::Debug
+        })
+        .write_style(WriteStyle::Always)
+        .parse_env(
+            Env::new()
+                .filter("TLATERNET_LOG_LEVEL")
+                .write_style("TLATERNET_LOG_STYLE"),
+        )
+        .init();
 
     let mut handlebars = Handlebars::new();
     handlebars