diff --git a/conf/nebula-graphd.conf.default b/conf/nebula-graphd.conf.default
index 441f714cfa7d09a2f7f8fb1ae9c5c5f33059812a..36864a2ced07aa45548977a94355229316935e8b 100644
--- a/conf/nebula-graphd.conf.default
+++ b/conf/nebula-graphd.conf.default
@@ -7,7 +7,7 @@
 --enable_optimizer=true
 
 ########## logging ##########
-# The directory to host logging files, which must already exists
+# The directory to host logging files
 --log_dir=logs
 # Log level, 0, 1, 2, 3 for INFO, WARNING, ERROR, FATAL respectively
 --minloglevel=0
diff --git a/conf/nebula-graphd.conf.production b/conf/nebula-graphd.conf.production
index 89c3f78a22b082ddd2154203da20ff5ff561715e..dccec9356bca1e3ab220bc9edcc02e568eb16e26 100644
--- a/conf/nebula-graphd.conf.production
+++ b/conf/nebula-graphd.conf.production
@@ -7,7 +7,7 @@
 --enable_optimizer=true
 
 ########## logging ##########
-# The directory to host logging files, which must already exists
+# The directory to host logging files
 --log_dir=logs
 # Log level, 0, 1, 2, 3 for INFO, WARNING, ERROR, FATAL respectively
 --minloglevel=0
diff --git a/src/daemons/GraphDaemon.cpp b/src/daemons/GraphDaemon.cpp
index c17880cca2f808935edd941438fa8e804aa25df3..024a7ccf4801a51f07da2617566f8eae7db28f14 100644
--- a/src/daemons/GraphDaemon.cpp
+++ b/src/daemons/GraphDaemon.cpp
@@ -25,6 +25,7 @@ using nebula::Status;
 using nebula::ProcessUtils;
 using nebula::graph::GraphService;
 using nebula::network::NetworkUtils;
+using nebula::fs::FileUtils;
 
 static std::unique_ptr<apache::thrift::ThriftServer> gServer;
 
@@ -197,6 +198,14 @@ void signalHandler(int sig) {
 
 
 Status setupLogging() {
+    // If the log directory does not exist, try to create
+    if (!FileUtils::exist(FLAGS_log_dir)) {
+        if (!FileUtils::makeDir(FLAGS_log_dir)) {
+            return Status::Error("Failed to create log directory `%s'",
+                                 FLAGS_log_dir.c_str());
+        }
+    }
+
     if (!FLAGS_redirect_stdout) {
         return Status::OK();
     }