diff --git a/src/flow/lib/log.rb b/src/flow/lib/log.rb
index b1c75f9aad..b44f8ba2d4 100644
--- a/src/flow/lib/log.rb
+++ b/src/flow/lib/log.rb
@@ -53,6 +53,15 @@ class Log
             @@logger = logger
         end
 
+        # Sets the logger type
+        # @param type [String]
+        #
+        #   - file: log into log files
+        #   - syslog: log into syslog
+        def type=(type)
+            @@type = type
+        end
+
         # Sets the log level
         # @param [Integer] log_level (0:ERROR, 1:WARN, 2:INFO, 3:DEBUG)
         def level=(log_level)
@@ -135,23 +144,25 @@ class Log
             end
 
             begin
-                msg = format(MSG_FORMAT,
-                             Time.now.strftime(DATE_FORMAT),
-                             Logger::SEV_LABEL[severity][0..0],
-                             component,
-                             message)
+                file = "#{LOG_LOCATION}/oneflow/#{service_id}.log"
+                msg  = format(
+                    MSG_FORMAT,
+                    Time.now.strftime(DATE_FORMAT),
+                    Logger::SEV_LABEL[severity][0..0],
+                    component,
+                    message
+                )
 
-                File.open("#{LOG_LOCATION}/oneflow/#{service_id}.log",
-                          'a') do |f|
-                    f <<  msg
+                case @@type
+                when 'syslog'
+                    @@logger.info(msg)
+                else
+                    File.open(file, 'a') {|f| f << msg }
                 end
             rescue Errno::ENOENT
                 FileUtils.mkdir("#{LOG_LOCATION}/oneflow/")
 
-                File.open("#{LOG_LOCATION}/oneflow/#{service_id}.log",
-                          'a') do |f|
-                    f <<  msg
-                end
+                File.open(file, 'a') {|f| f << msg }
             rescue StandardError => e
                 message = 'Could not log into ' \
                           "#{LOG_LOCATION}/oneflow/#{service_id}.log: " \
diff --git a/src/flow/oneflow-server.rb b/src/flow/oneflow-server.rb
index f0e64602c5..28bb1eb330 100644
--- a/src/flow/oneflow-server.rb
+++ b/src/flow/oneflow-server.rb
@@ -70,6 +70,7 @@ require 'CloudServer'
 
 require 'models'
 require 'log'
+require 'syslog/logger'
 
 require 'LifeCycleManager'
 require 'EventManager'
@@ -87,7 +88,12 @@ rescue StandardError => e
     exit 1
 end
 
-conf[:debug_level]         ||= 2
+if conf[:log]
+    conf[:debug_level] = conf[:log][:level] || 2
+else
+    conf[:debug_level] ||= 2
+end
+
 conf[:autoscaler_interval] ||= 90
 conf[:default_cooldown]    ||= 300
 conf[:shutdown_action]     ||= 'terminate'
@@ -107,7 +113,13 @@ set :config, conf
 include CloudLogger
 # rubocop:enable Style/MixinUsage
 
-logger = enable_logging ONEFLOW_LOG, conf[:debug_level].to_i
+if conf[:log] && conf[:log][:system] == 'syslog'
+    logger   = Syslog::Logger.new('oneflow')
+    Log.type = 'syslog'
+else
+    logger   = enable_logging ONEFLOW_LOG, conf[:debug_level].to_i
+    Log.type = 'file'
+end
 
 use Rack::Session::Pool, :key => 'oneflow'
 
diff --git a/src/onegate/onegate-server.rb b/src/onegate/onegate-server.rb
index c07e6db0e7..d0637e0209 100644
--- a/src/onegate/onegate-server.rb
+++ b/src/onegate/onegate-server.rb
@@ -65,6 +65,7 @@ require 'sinatra'
 require 'yaml'
 require 'json'
 require 'set'
+require 'syslog/logger'
 
 require 'CloudAuth'
 require 'CloudServer'
@@ -111,7 +112,18 @@ set :port, $conf[:port]
 set :config, $conf
 
 include CloudLogger
-logger = enable_logging(ONEGATE_LOG, $conf[:debug_level].to_i)
+
+if $conf[:log]
+    $conf[:debug_level] = $conf[:log][:level] || 2
+else
+    $conf[:debug_level] ||= 2
+end
+
+if $conf[:log] && $conf[:log][:system] == 'syslog'
+    logger = Syslog::Logger.new('onegate')
+else
+    logger = enable_logging(ONEGATE_LOG, $conf[:debug_level].to_i)
+end
 
 begin
     ENV["ONE_CIPHER_AUTH"] = ONEGATE_AUTH
diff --git a/src/sunstone/sunstone-server.rb b/src/sunstone/sunstone-server.rb
index 470ccd5d4f..e6458239a9 100755
--- a/src/sunstone/sunstone-server.rb
+++ b/src/sunstone/sunstone-server.rb
@@ -135,6 +135,7 @@ require 'base64'
 require 'rexml/document'
 require 'uri'
 require 'open3'
+require 'syslog/logger'
 
 require "sunstone_qr_code"
 require "sunstone_optp"
@@ -171,7 +172,6 @@ if $conf[:one_xmlrpc_timeout]
     ENV['ONE_XMLRPC_TIMEOUT'] = $conf[:one_xmlrpc_timeout].to_s unless ENV['ONE_XMLRPC_TIMEOUT']
 end
 
-$conf[:debug_level] ||= 3
 $conf[:webauthn_avail] = webauthn_avail
 
 # Set Sunstone Session Timeout
@@ -246,7 +246,18 @@ use Rack::Deflater
 # Enable logger
 
 include CloudLogger
-logger=enable_logging(SUNSTONE_LOG, $conf[:debug_level].to_i)
+
+if $conf[:log]
+    $conf[:debug_level] = $conf[:log][:level] || 3
+else
+    $conf[:debug_level] ||= 3
+end
+
+if $conf[:log] && $conf[:log][:system] == 'syslog'
+    logger = Syslog::Logger.new('onegate')
+else
+    logger = enable_logging(SUNSTONE_LOG, $conf[:debug_level].to_i)
+end
 
 begin
     ENV["ONE_CIPHER_AUTH"] = SUNSTONE_AUTH