diff --git a/README.md b/README.md
index 17465b2..2b5e0b9 100644
--- a/README.md
+++ b/README.md
@@ -252,10 +252,14 @@
 The main thread will manage the other threads, and process the initial
 configuration files. It will also register a dbus handler for the OEM message.
 
-### Enabling Logging
+### Enabling Logging & Tuning
 
-By default, swampd won't log tuning information.  To enable this pass "-t" on
-the command line with a pareter of the path to write the log file.
+By default, swampd won't log information.  To enable logging pass "-l" on the
+command line with a parameter that is the folder into which to write the logs.
+
+The log files will be named {folderpath}/zone_{zoneid}.log
+
+To enable tuning, pass "-t" on the command line.
 
 ## Project Information
 
diff --git a/main.cpp b/main.cpp
index 477be66..3726f50 100644
--- a/main.cpp
+++ b/main.cpp
@@ -62,21 +62,23 @@
 {
     int rc = 0;
     std::string configPath = "";
-    tuningLoggingPath = "";
+    loggingPath = "";
+    loggingEnabled = false;
+    tuningEnabled = false;
 
     CLI::App app{"OpenBMC Fan Control Daemon"};
 
     app.add_option("-c,--conf", configPath,
                    "Optional parameter to specify configuration at run-time")
         ->check(CLI::ExistingFile);
-    app.add_option("-t,--tuning", tuningLoggingPath,
-                   "Optional parameter to specify tuning logging path, and "
-                   "enable tuning");
+    app.add_option("-l,--log", loggingPath,
+                   "Optional parameter to specify logging path");
+    app.add_flag("-t,--tuning", tuningEnabled, "Enable or disable tuning");
+
+    loggingEnabled = (!loggingPath.empty());
 
     CLI11_PARSE(app, argc, argv);
 
-    tuningLoggingEnabled = (tuningLoggingPath.length() > 0);
-
     auto modeControlBus = sdbusplus::bus::new_system();
     static constexpr auto modeRoot = "/xyz/openbmc_project/settings/fanctrl";
     // Create a manager for the ModeBus because we own it.
diff --git a/pid/fancontroller.cpp b/pid/fancontroller.cpp
index 4c1b56b..1f23e0b 100644
--- a/pid/fancontroller.cpp
+++ b/pid/fancontroller.cpp
@@ -115,8 +115,8 @@
 {
     double percent = value;
 
-    /* If doing tuning logging, don't go into failsafe mode. */
-    if (!tuningLoggingEnabled)
+    /* If doing tuning, don't go into failsafe mode. */
+    if (!tuningEnabled)
     {
         if (_owner->getFailSafeMode())
         {
diff --git a/pid/pidloop.cpp b/pid/pidloop.cpp
index b684747..f613c7e 100644
--- a/pid/pidloop.cpp
+++ b/pid/pidloop.cpp
@@ -45,7 +45,7 @@
 {
     if (first)
     {
-        if (tuningLoggingEnabled)
+        if (loggingEnabled)
         {
             zone->initializeLog();
         }
@@ -104,7 +104,7 @@
             // Run the fan PIDs every iteration.
             zone->processFans();
 
-            if (tuningLoggingEnabled)
+            if (loggingEnabled)
             {
                 zone->getLogHandle() << "," << zone->getFailSafeMode();
                 zone->getLogHandle() << std::endl;
diff --git a/pid/tuning.cpp b/pid/tuning.cpp
index c3f21ed..3422e34 100644
--- a/pid/tuning.cpp
+++ b/pid/tuning.cpp
@@ -16,5 +16,7 @@
 
 #include <string>
 
-bool tuningLoggingEnabled = false;
-std::string tuningLoggingPath;
+bool tuningEnabled = false;
+
+std::string loggingPath;
+bool loggingEnabled = false;
diff --git a/pid/tuning.hpp b/pid/tuning.hpp
index 511c797..ba4ec32 100644
--- a/pid/tuning.hpp
+++ b/pid/tuning.hpp
@@ -2,8 +2,12 @@
 
 #include <string>
 
-/** Boolean variable controlling whether tuning logging output is enabled
+/** Boolean variable controlling whether tuning is enabled
  * during this run.
  */
-extern bool tuningLoggingEnabled;
-extern std::string tuningLoggingPath;
+extern bool tuningEnabled;
+/** String variable with the folder for writing logs if logging is enabled.
+ */
+extern std::string loggingPath;
+/** Boolean variable whether loggingPath is non-empty. */
+extern bool loggingEnabled;
diff --git a/pid/zone.cpp b/pid/zone.cpp
index 928aef5..eef4fde 100644
--- a/pid/zone.cpp
+++ b/pid/zone.cpp
@@ -139,7 +139,7 @@
      */
     max = std::max(getMinThermalRPMSetpoint(), max);
 
-    if (tuningLoggingEnabled)
+    if (tuningEnabled)
     {
         /*
          * We received no setpoints from thermal sensors.
@@ -217,7 +217,7 @@
      * is disabled?  I think it's a waste to try and log things even if the
      * data is just being dropped though.
      */
-    if (tuningLoggingEnabled)
+    if (loggingEnabled)
     {
         tstamp now = std::chrono::high_resolution_clock::now();
         _log << std::chrono::duration_cast<std::chrono::milliseconds>(
@@ -237,13 +237,13 @@
          * However, these are the fans, so if I'm not getting updated values
          * for them... what should I do?
          */
-        if (tuningLoggingEnabled)
+        if (loggingEnabled)
         {
             _log << "," << r.value;
         }
     }
 
-    if (tuningLoggingEnabled)
+    if (loggingEnabled)
     {
         for (const auto& t : _thermalInputs)
         {
diff --git a/pid/zone.hpp b/pid/zone.hpp
index 78ebf0f..fcadac0 100644
--- a/pid/zone.hpp
+++ b/pid/zone.hpp
@@ -52,9 +52,9 @@
         _minThermalOutputSetPt(minThermalOutput),
         _failSafePercent(failSafePercent), _mgr(mgr)
     {
-        if (tuningLoggingEnabled && !tuningLoggingPath.empty())
+        if (loggingEnabled)
         {
-            _log.open(tuningLoggingPath + std::to_string(zone));
+            _log.open(loggingPath + std::to_string(zone));
         }
     }
 
