diff --git a/go.mod b/go.mod
index 990b7db4..c5530c14 100644
--- a/go.mod
+++ b/go.mod
@@ -20,5 +20,6 @@ require (
 	golang.org/x/crypto v0.0.0-20200403201458-baeed622b8d8
 	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
 	golang.org/x/sys v0.0.0-20200331124033-c3d80250170d
+	gopkg.in/natefinch/lumberjack.v2 v2.0.0
 	gopkg.in/yaml.v2 v2.2.8
 )
diff --git a/go.sum b/go.sum
index 4eda4dc9..4a7131a3 100644
--- a/go.sum
+++ b/go.sum
@@ -159,6 +159,8 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8
 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/home/config.go b/home/config.go
index f453a732..341c7d96 100644
--- a/home/config.go
+++ b/home/config.go
@@ -24,8 +24,13 @@ const (
 
 // logSettings
 type logSettings struct {
-	LogFile string `yaml:"log_file"` // Path to the log file. If empty, write to stdout. If "syslog", writes to syslog
-	Verbose bool   `yaml:"verbose"`  // If true, verbose logging is enabled
+	LogCompress   bool   `yaml:"log_compress"`    // Compress determines if the rotated log files should be compressed using gzip (default: false)
+	LogLocalTime  bool   `yaml:"log_localtime"`   // If the time used for formatting the timestamps in is the computer's local time (default: false [UTC])
+	LogMaxBackups int    `yaml:"log_max_backups"` // Maximum number of old log files to retain (MaxAge may still cause them to get deleted)
+	LogMaxSize    int    `yaml:"log_max_size"`    // Maximum size in megabytes of the log file before it gets rotated (default 100 MB)
+	LogMaxAge     int    `yaml:"log_max_age"`     // MaxAge is the maximum number of days to retain old log files
+	LogFile       string `yaml:"log_file"`        // Path to the log file. If empty, write to stdout. If "syslog", writes to syslog
+	Verbose       bool   `yaml:"verbose"`         // If true, verbose logging is enabled
 }
 
 // configuration is loaded from YAML
@@ -131,6 +136,13 @@ var config = configuration{
 		LeaseDuration: 86400,
 		ICMPTimeout:   1000,
 	},
+	logSettings: logSettings{
+		LogCompress:   false,
+		LogLocalTime:  false,
+		LogMaxBackups: 0,
+		LogMaxSize:    100,
+		LogMaxAge:     0,
+	},
 	SchemaVersion: currentSchemaVersion,
 }
 
diff --git a/home/home.go b/home/home.go
index 579101cf..becedbbb 100644
--- a/home/home.go
+++ b/home/home.go
@@ -6,6 +6,7 @@ import (
 	"crypto/tls"
 	"crypto/x509"
 	"fmt"
+	"gopkg.in/natefinch/lumberjack.v2"
 	"io"
 	"io/ioutil"
 	"net"
@@ -396,13 +397,22 @@ func configureLogger(args options) {
 	ls := getLogSettings()
 
 	// command-line arguments can override config settings
-	if args.verbose {
+	if args.verbose || config.Verbose {
 		ls.Verbose = true
 	}
 	if args.logFile != "" {
 		ls.LogFile = args.logFile
+	} else if config.LogFile != "" {
+		ls.LogFile = config.LogFile
 	}
 
+	// Handle default log settings overrides
+	ls.LogCompress = config.LogCompress
+	ls.LogLocalTime = config.LogLocalTime
+	ls.LogMaxBackups = config.LogMaxBackups
+	ls.LogMaxSize = config.LogMaxSize
+	ls.LogMaxAge = config.LogMaxAge
+
 	// log.SetLevel(log.INFO) - default
 	if ls.Verbose {
 		log.SetLevel(log.DEBUG)
@@ -414,6 +424,7 @@ func configureLogger(args options) {
 		ls.LogFile = configSyslog
 	}
 
+	// logs are written to stdout (default)
 	if ls.LogFile == "" {
 		return
 	}
@@ -430,11 +441,19 @@ func configureLogger(args options) {
 			logFilePath = ls.LogFile
 		}
 
-		file, err := os.OpenFile(logFilePath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
+		_, err := os.OpenFile(logFilePath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
 		if err != nil {
 			log.Fatalf("cannot create a log file: %s", err)
 		}
-		log.SetOutput(file)
+
+		log.SetOutput(&lumberjack.Logger{
+			Filename:   logFilePath,
+			Compress:   ls.LogCompress, // disabled by default
+			LocalTime:  ls.LogLocalTime,
+			MaxBackups: ls.LogMaxBackups,
+			MaxSize:    ls.LogMaxSize, // megabytes
+			MaxAge:     ls.LogMaxAge,  //days
+		})
 	}
 }