diff --git a/ice-server/src/IceServer.cpp b/ice-server/src/IceServer.cpp
index 9a47a483f9..800592073f 100644
--- a/ice-server/src/IceServer.cpp
+++ b/ice-server/src/IceServer.cpp
@@ -30,6 +30,7 @@
 #include <udt/PacketHeaders.h>
 #include <SharedUtil.h>
 #include "WarningsSuppression.h"
+#include <LogHandler.h>
 
 const int CLEAR_INACTIVE_PEERS_INTERVAL_MSECS = 1 * 1000;
 const int PEER_SILENCE_THRESHOLD_MSECS = 5 * 1000;
@@ -51,6 +52,9 @@ IceServer::IceServer(int argc, char* argv[]) :
     const QCommandLineOption portOption("port", "Port for the ICE server to listen on", "port");
     parser.addOption(portOption);
 
+    const QCommandLineOption logOption("logOptions",  "Logging options, comma separated: ", "color,nocolor,process_id,thread_id,milliseconds,keep_repeats,journald,nojournald", "options");
+    parser.addOption(logOption);
+
     if (!parser.parse(QCoreApplication::arguments())) {
         qCritical() << parser.errorText() << Qt::endl;
         parser.showHelp();
@@ -77,6 +81,17 @@ IceServer::IceServer(int argc, char* argv[]) :
         port = parser.value(portOption).toInt();
     }
 
+    // We want to configure the logging system as early as possible
+    auto& logHandler = LogHandler::getInstance();
+    if (parser.isSet(logOption)) {
+        if (!logHandler.parseOptions(parser.value(logOption).toUtf8(), logOption.names().first())) {
+            QCoreApplication mockApp(argc, const_cast<char**>(argv));  // required for call to showHelp()
+            parser.showHelp();
+            Q_UNREACHABLE();
+        }
+    }
+
+
     _serverSocket.bind(SocketType::UDP, address, port);
     qDebug() << "ice-server socket is listening on address: " << address.toString() << ":" << port;
 
diff --git a/tools/ice-client/src/ICEClientApp.cpp b/tools/ice-client/src/ICEClientApp.cpp
index b10ef46b62..b73030e5c0 100644
--- a/tools/ice-client/src/ICEClientApp.cpp
+++ b/tools/ice-client/src/ICEClientApp.cpp
@@ -20,6 +20,7 @@
 #include <PathUtils.h>
 #include <LimitedNodeList.h>
 #include <NetworkLogging.h>
+#include <LogHandler.h>
 
 ICEClientApp::ICEClientApp(int argc, char* argv[]) :
     QCoreApplication(argc, argv)
@@ -46,6 +47,9 @@ ICEClientApp::ICEClientApp(int argc, char* argv[]) :
     const QCommandLineOption cacheSTUNOption("s", "cache stun-server response");
     parser.addOption(cacheSTUNOption);
 
+    const QCommandLineOption logOption("logOptions", "Logging options, comma separated: ", "color,nocolor,process_id,thread_id,milliseconds,keep_repeats,journald,nojournald", "options");
+    parser.addOption(logOption);
+
     if (!parser.parse(QCoreApplication::arguments())) {
         qCritical() << parser.errorText() << Qt::endl;
         parser.showHelp();
@@ -81,6 +85,16 @@ ICEClientApp::ICEClientApp(int argc, char* argv[]) :
         }
     }
 
+    // We want to configure the logging system as early as possible
+    auto& logHandler = LogHandler::getInstance();
+    if (parser.isSet(logOption)) {
+        if (!logHandler.parseOptions(parser.value(logOption).toUtf8(), logOption.names().first())) {
+            QCoreApplication mockApp(argc, const_cast<char**>(argv));  // required for call to showHelp()
+            parser.showHelp();
+            Q_UNREACHABLE();
+        }
+    }
+
     _iceServerAddr = SockAddr(SocketType::UDP, "127.0.0.1", ICE_SERVER_DEFAULT_PORT);
     if (parser.isSet(iceServerAddressOption)) {
         // parse the IP and port combination for this target