diff --git a/emper/log/log.cpp b/emper/log/log.cpp
index 0f953d1ebaf07c56573336c1565d0c1a23bc1235..14140f462bd3e46906a0a3ca132d8cc0d2a065b9 100644
--- a/emper/log/log.cpp
+++ b/emper/log/log.cpp
@@ -21,11 +21,12 @@
 
 using emper::io::GlobalIoContext;
 
-static const long NanosInAMinute = 60L * 1000 * 1000 * 1000;
+//static const long NanosInAMinute = 60L * 1000 * 1000 * 1000;
 
 namespace emper::log {
 
-static void add_timestamp_to(std::ostringstream& logMessage) {
+static void add_timestamp_to(UNUSED_ARG std::ostringstream& logMessage) {
+#if 0
 	auto now = std::chrono::high_resolution_clock::now();
 
 	auto now_time_t = std::chrono::high_resolution_clock::to_time_t(now);
@@ -53,6 +54,7 @@ static void add_timestamp_to(std::ostringstream& logMessage) {
 
 	long remaining_nanos = time_since_epoch_long % NanosInAMinute;
 	logMessage << remaining_nanos;
+#endif
 }
 
 static std::mutex log_mutex;
diff --git a/msan b/msan
new file mode 100644
index 0000000000000000000000000000000000000000..196431b441d20265b70fd755430dde14fc113a09
--- /dev/null
+++ b/msan
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+readonly INSTRUMENTED_LIBCXX_DIR="/home/flo/repos/llvm-13.0.0/build"
+
+readonly INSTRUMENTED_LIBCXX_LIB_DIR="${INSTRUMENTED_LIBCXX_DIR}/lib"
+readonly INSTRUMENTED_LIBCXX_INC_DIR="${INSTRUMENTED_LIBCXX_DIR}/include"
+
+# export CC="clang -stdlib=libc++ -L${INSTRUMENTED_LIBCXX_LIB_DIR} -I${INSTRUMENTED_LIBCXX_INC_DIR} -I${INSTRUMENTED_LIBCXX_INC_DIR}c++/v1"
+# export CXX="clang++ -stdlib=libc++ -lc++abi -L${INSTRUMENTED_LIBCXX_LIB_DIR} -I${INSTRUMENTED_LIBCXX_INC_DIR} -I${INSTRUMENTED_LIBCXX_INC_DIR}/c++/v1"
+
+export CC="clang"
+export CXX="clang++"
+
+# source: https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo
+# MSAN_CFLAGS="-fsanitize=memory -stdlib=libc++ -L/path/to/libcxx_msan/lib -lc++abi -I/path/to/libcxx_msan/include -I/path/to/libcxx_msan/include/c++/v1"
+# Note that meson automatically passes -stblib=libc++ if clang is used
+# TODO: why -lc++abi ?
+MSAN_FLAGS=(
+#	-stdlib=libc++
+	-L${INSTRUMENTED_LIBCXX_LIB_DIR}
+#	-lc++abi
+	-I${INSTRUMENTED_LIBCXX_INC_DIR}/include
+	-I${INSTRUMENTED_LIBCXX_INC_DIR}/include/c++/v1
+)
+
+
+printf -v MESON_MSAN_CPP_ARGS "%s," "${MSAN_FLAGS[@]}"
+
+# Meson's c_stdlib flag may only work for cross builds "--native-file foo.ini"
+
+#	-Dcpp_args="${MESON_MSAN_CPP_ARGS}" \
+meson \
+	--buildtype=debug \
+	--fatal-meson-warnings \
+	-Db_sanitize=memory \
+	-Db_lundef=false \
+	-Dcpp_args='-stdlib=libc++' \
+	-Dcpp_args=-I${INSTRUMENTED_LIBCXX_INC_DIR} \
+	-Dcpp_args=-I${INSTRUMENTED_LIBCXX_INC_DIR}/c++/v1 \
+	-Dcpp_link_args=-L${INSTRUMENTED_LIBCXX_LIB_DIR} \
+    build-msan
+
+# It appears that meson is filtering -stdlib=libc++ and always selects
+# the compilers default. Which is for clang often libstdc++, i.e., GCC
+# C++ standard library.
+# NOTE: We could potentially place a complete LLVM/Clang toolchain in
+# the CI container, that has the sanitizers enabled.
+sed --in-place \
+	s/clang++/clang++ -stdlib=libc++/ \
+	build-msan/build.ninja
+
+ninja
+
+export LD_LIBRARY_PATH="${INSTRUMENTED_LIBCXX_LIB_DIR}"