diff --git a/flake.nix b/flake.nix
index 1fbe092f68482a65364db36cad1aecaf82929e87..64f7be9a6eb472cf3c38f9dc9afe0191776ce14c 100644
--- a/flake.nix
+++ b/flake.nix
@@ -31,6 +31,7 @@
             (nix-filter.lib.inDirectory "config")
             (nix-filter.lib.inDirectory "stdlib")
             (nix-filter.lib.inDirectory "doc")
+            (nix-filter.lib.inDirectory "utils")
           ];
         };
       };
diff --git a/lib/ir/dune b/lib/ir/dune
index ff97750bd5db22e23ce3c9ea75a9f252d7d6555c..14a9bd69afbf4d9e5a36e6dc4b88b4ef669ddcc7 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 unix))
+ (libraries base ocamlgraph fmt stdio unix caisar_logging))
 
 (env
  (dev
diff --git a/lib/nnet/dune b/lib/nnet/dune
index 052c7e99644147c5068654ef90ed1f461c36689e..b6180d7c1db4d993685be8a0962965b65928005e 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_logging)
  (synopsis "NNet parser for CAISAR"))
diff --git a/lib/onnx/dune b/lib/onnx/dune
index 88dea6fe7dd2de091799a2136070dc49de027699..37c850e320bf54e59c3e528fff0eb51c7c141c26 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_logging)
  (synopsis "ONNX parser for CAISAR"))
 
 (rule
diff --git a/lib/ovo/dune b/lib/ovo/dune
index e54243a3ef789fd90414331b78265091e3b55f7c..690e65caab398c0cfe78c701859fb57c658a11e1 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_logging)
  (synopsis "OVO parser for CAISAR"))
diff --git a/lib/xgboost/dune b/lib/xgboost/dune
index 9a07b01ea15a7c599ef2cc4d272e1497b5227df8..d0ad55cf48ea992657c041c8c63f32cf41254ea8 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_logging))
diff --git a/src/dune b/src/dune
index 013aad1ad73f2872edafa7fb997432b281d29898..ab868447a863fc15039b8c8b72eae6e0bbefb0cc 100644
--- a/src/dune
+++ b/src/dune
@@ -1,13 +1,12 @@
 (executable
  (name main)
  (public_name caisar)
+ (flags
+  (:standard -open Caisar_logging))
  (libraries
   menhirLib
   yojson
   cmdliner
-  logs
-  logs.cli
-  logs.fmt
   fmt.tty
   fmt.cli
   base
@@ -24,6 +23,7 @@
   yaml.unix
   fpath
   zarith
+  caisar_logging
   caisar.xgboost)
  (preprocess
   (pps
diff --git a/utils/dune b/utils/dune
new file mode 100644
index 0000000000000000000000000000000000000000..a70bed45a80178d4c3ebaa4256f5184b220e882a
--- /dev/null
+++ b/utils/dune
@@ -0,0 +1,5 @@
+(library
+ (name caisar_logging)
+ (package caisar)
+ (libraries base csv logs logs.cli logs.fmt fmt why3)
+ (synopsis "Logging utilities for CAISAR"))
diff --git a/src/logging.ml b/utils/logging.ml
similarity index 100%
rename from src/logging.ml
rename to utils/logging.ml
diff --git a/src/logging.mli b/utils/logging.mli
similarity index 100%
rename from src/logging.mli
rename to utils/logging.mli