diff --git a/flake.nix b/flake.nix
index 94fb118e79c92cfcd4451c8874ef19fc69604250..73f1d55bda63d49630eb6a8975a33eec0a7ac02c 100644
--- a/flake.nix
+++ b/flake.nix
@@ -30,6 +30,7 @@
             (nix-filter.lib.inDirectory "config")
             (nix-filter.lib.inDirectory "stdlib")
             (nix-filter.lib.inDirectory "doc")
+            (nix-filter.lib.inDirectory "logging")
           ];
         };
       };
diff --git a/lib/ir/dune b/lib/ir/dune
index a0fa35532b0d61a3eeb6729f67a90259145fd13d..fa1ef79466a290417c80e30495f3168faf7eca1b 100644
--- a/lib/ir/dune
+++ b/lib/ir/dune
@@ -11,7 +11,7 @@
    ppx_deriving.iter
    ppx_deriving.fold))
  (inline_tests)
- (libraries base ocamlgraph fmt stdio))
+ (libraries base ocamlgraph fmt stdio caisar.log))
 
 (env
  (dev
diff --git a/lib/nnet/dune b/lib/nnet/dune
index 052c7e99644147c5068654ef90ed1f461c36689e..e8f9ce363d36358692a7cf0a3a5f474df318dbf2 100644
--- a/lib/nnet/dune
+++ b/lib/nnet/dune
@@ -1,5 +1,5 @@
 (library
  (name nnet)
  (public_name caisar.nnet)
- (libraries base csv)
+ (libraries base csv caisar.log)
  (synopsis "NNet parser for CAISAR"))
diff --git a/lib/onnx/dune b/lib/onnx/dune
index 88dea6fe7dd2de091799a2136070dc49de027699..1ada251ade4fe4fd7af58afa4958feb8485c13a1 100644
--- a/lib/onnx/dune
+++ b/lib/onnx/dune
@@ -1,7 +1,7 @@
 (library
  (name onnx)
  (public_name caisar.onnx)
- (libraries base stdio ocaml-protoc-plugin ocplib-endian caisar.ir)
+ (libraries base stdio ocaml-protoc-plugin ocplib-endian caisar.ir caisar.log)
  (synopsis "ONNX parser for CAISAR"))
 
 (rule
diff --git a/lib/ovo/dune b/lib/ovo/dune
index e54243a3ef789fd90414331b78265091e3b55f7c..e6853d54b406d02b3d28f3c7c5d3ef60484c0425 100644
--- a/lib/ovo/dune
+++ b/lib/ovo/dune
@@ -1,5 +1,5 @@
 (library
  (name ovo)
  (public_name caisar.ovo)
- (libraries base csv)
+ (libraries base csv caisar.log)
  (synopsis "OVO parser for CAISAR"))
diff --git a/lib/xgboost/dune b/lib/xgboost/dune
index 9a07b01ea15a7c599ef2cc4d272e1497b5227df8..1bb408b086855d7f57fc2fd8c822dcf988f7542c 100644
--- a/lib/xgboost/dune
+++ b/lib/xgboost/dune
@@ -4,4 +4,4 @@
  (preprocess
   (pps ppx_deriving.show ppx_deriving_yojson))
  (flags -w -30)
- (libraries csv))
+ (libraries csv caisar.log))
diff --git a/logging/dune b/logging/dune
new file mode 100644
index 0000000000000000000000000000000000000000..1bd418801235793513fe3f14306e3c54fc8470d6
--- /dev/null
+++ b/logging/dune
@@ -0,0 +1,5 @@
+(library
+ (name logging)
+ (public_name caisar.log)
+ (libraries base csv logs logs.cli logs.fmt fmt why3)
+ (synopsis "Logging utilities for CAISAR"))
diff --git a/src/logging.ml b/logging/logging.ml
similarity index 100%
rename from src/logging.ml
rename to logging/logging.ml
diff --git a/src/logging.mli b/logging/logging.mli
similarity index 100%
rename from src/logging.mli
rename to logging/logging.mli
diff --git a/src/dune b/src/dune
index 013aad1ad73f2872edafa7fb997432b281d29898..bba4095f3cca4d1f6d1a4125ccfb92c4bbeed928 100644
--- a/src/dune
+++ b/src/dune
@@ -5,9 +5,6 @@
   menhirLib
   yojson
   cmdliner
-  logs
-  logs.cli
-  logs.fmt
   fmt.tty
   fmt.cli
   base
@@ -24,6 +21,7 @@
   yaml.unix
   fpath
   zarith
+  caisar.log
   caisar.xgboost)
  (preprocess
   (pps