diff --git a/.gitignore b/.gitignore
index b79a8a6cb47a5302297cd3781a61827738a248e8..9e78a0b2ddc395cb87451338c69d71b2e06db939 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 .vscode
 **/*.pyc
+logs
\ No newline at end of file
diff --git a/install-mpsd-software-environment.py b/install-mpsd-software-environment.py
index 3760b87b85896a6a368ad282f7aab1ab2575fec9..11ca6b573d97805378ca7fbb6312a8dee30e1f21 100644
--- a/install-mpsd-software-environment.py
+++ b/install-mpsd-software-environment.py
@@ -2,6 +2,7 @@
 import os
 import subprocess
 import time
+import datetime
 import argparse
 import sys
 from pathlib import Path
@@ -70,9 +71,34 @@ class builder:
         self.cmd_log_file = "logs/install-software-environment.log"
         self.build_log_file = f"build_toolchains_{self.mpsd_spack_ver}_{time.strftime('%Y%m%d-%H%M%S')}.log"
 
+        # Setup the log file for commands
+        self.setup_log_cmd()
+
         # run the script
         # self.run() # better to call this seperately after creating the object
 
+    def setup_log_cmd(self):
+        # Create log directory if it doesn't exist
+        if not os.path.exists("logs"):
+            os.makedirs("logs")
+        # Write to the log file with the following format
+        # --------------------------------------------------
+        # 2023-02-29T23:32:01, install-software-environment.py --release dev-23a --install ALL
+        # Software environment installer branch: script_branch (commit hash: script_commit_hash)
+        # Spack environments branch: dev-23a (commit hash: spe_commit_hash)
+        with open(self.cmd_log_file, "a") as f:
+            f.write("-" * 50 + "\n")
+            cmd_line = " ".join(sys.argv)
+            f.write(
+                f"{datetime.datetime.now().isoformat()}, install-software-environment.py {cmd_line}\n"
+            )
+            f.write(
+                f"Software environment installer branch: {self.script_branch} (commit hash: {self.script_commit_hash})\n"
+            )
+            f.write(
+                f"Spack environments branch: {self.spe_branch} (commit hash: {self.spe_commit_hash})\n"
+            )
+
     def run(self):
         if self.run_mode == "remove":
             self.remove_toolchains()
@@ -84,6 +110,13 @@ class builder:
             self.prepare_env()
 
     def prepare_env(self):
+        # ensure required arguments are not None
+        if self.toolchain_base_dir is None:
+            raise ValueError("Error: Please specify the target directory")
+        if self.mpsd_spack_ver is None:
+            raise ValueError("Error: Please specify the release version to install")
+        if self.toolchain_base_dir is None:
+            raise ValueError("Error: Please specify the target directory for installation")
         if not os.path.exists(self.toolchain_base_dir):
             os.makedirs(self.toolchain_base_dir)
         else:
@@ -104,9 +137,19 @@ class builder:
                 subprocess.run(["git", "checkout", self.mpsd_spack_ver])
 
     def install_toolchains(
-        release, install, target_dir, force_reinstall, skip_build_cache, skip_dir_check
+        self,
+        release,
+        install,
+        target_dir,
+        force_reinstall,
+        skip_build_cache,
+        skip_dir_check,
     ):
-        prepare_env(release, target_dir, skip_dir_check)
+        # ensure required arguments are not None
+
+        if self.toolchain_list is None:
+            raise ValueError("Error: Please specify the toolchains to install")
+        self.prepare_env()
 
     def start_new_env(set_up, from_release):
         pass
diff --git a/tests.py b/tests.py
index cb522777873b6083c1d8f7744425fa91a05af1fe..6961f740e4f516d4d8a3ce1f7f6836c1eea6e2ae 100644
--- a/tests.py
+++ b/tests.py
@@ -4,7 +4,11 @@ import importlib
 import subprocess
 import time
 import shutil
+
 mod = importlib.import_module("install-mpsd-software-environment")
+test_release_path = (
+    "/tmp/test_prepare_env"  # temporary directory for testing used by multiple tests
+)
 
 
 def test_os_chdir():
@@ -30,7 +34,6 @@ def test_prepare_env():
     # simulate running ./install-software-environment.py --release dev-23a --target-directory /tmp/test_prepare_env
     # prepare_env is run when cmd is not specified, we can test cmd='prepare'  and cmd=None to check both cases
 
-    test_release_path = "/tmp/test_prepare_env"
     # if the directory exists, remove it
     if os.path.exists(test_release_path):
         shutil.rmtree(test_release_path)
@@ -56,7 +59,9 @@ def test_prepare_env():
             "cd /tmp/test_prepare_env/spack-environments && git branch",
             shell=True,
             capture_output=True,
-        ).stdout.decode("utf-8").split("\n")[0]
+        )
+        .stdout.decode("utf-8")
+        .split("\n")[0]
         == "* dev-23a"
     )
     # make sure running the command again raises ValueError
@@ -80,3 +85,26 @@ def test_prepare_env():
     run.run()
     # clean up the temporary directory
     shutil.rmtree(test_release_path)
+
+
+def test_setup_log_cmd():
+    # check that logs/install-software-environment.log is updated when the module is run
+    log_file = "logs/install-software-environment.log"
+    if os.path.exists(log_file):
+        initial_bytes = os.path.getsize(log_file)
+    else:
+        initial_bytes = 0
+
+    # run the prepare_env functionality
+    run = mod.builder(
+        release="dev-23a",
+        cmd=None,
+        target_dir=test_release_path,
+        skip_build_cache=False,
+    )
+    run.skip_dir_check = True
+    run.run()
+
+    # check that logs/install-software-environment.log is updated
+    assert os.path.exists("logs/install-software-environment.log")
+    assert os.path.getsize("logs/install-software-environment.log") > initial_bytes