diff --git a/api/geth_backend.go b/api/geth_backend.go index 62b5c45c31f..5c6c41b9035 100644 --- a/api/geth_backend.go +++ b/api/geth_backend.go @@ -205,7 +205,7 @@ func (b *GethStatusBackend) startNodeWithKey(acc multiaccounts.Account, password if err != nil { return err } - if err := logutils.OverrideRootLogWithConfig(conf, false); err != nil { + if err := logutils.OverrideRootLogWithConfig(conf, b.rootDataDir, false); err != nil { return err } accountsDB := accounts.NewDB(b.appDB) @@ -261,7 +261,7 @@ func (b *GethStatusBackend) startNodeWithAccount(acc multiaccounts.Account, pass if err != nil { return err } - if err := logutils.OverrideRootLogWithConfig(conf, false); err != nil { + if err := logutils.OverrideRootLogWithConfig(conf, b.rootDataDir, false); err != nil { return err } accountsDB := accounts.NewDB(b.appDB) @@ -442,6 +442,9 @@ func (b *GethStatusBackend) startNode(config *params.NodeConfig) (err error) { if manager == nil { return errors.New("ethereum accounts.Manager is nil") } + + config.DataDir = filepath.Join(b.rootDataDir, config.DataDir) + config.KeyStoreDir = filepath.Join(b.rootDataDir, config.KeyStoreDir) if err = b.statusNode.StartWithOptions(config, node.StartOptions{ Services: services, // The peers discovery protocols are started manually after diff --git a/api/nimbus_backend.go b/api/nimbus_backend.go index 611b645b5a4..0e079ed47ce 100644 --- a/api/nimbus_backend.go +++ b/api/nimbus_backend.go @@ -199,7 +199,7 @@ func (b *nimbusStatusBackend) startNodeWithKey(acc multiaccounts.Account, passwo if err != nil { return err } - if err := logutils.OverrideRootLogWithConfig(conf, false); err != nil { + if err := logutils.OverrideRootLogWithConfig(conf, b.rootDataDir, false); err != nil { return err } accountsDB := accounts.NewDB(b.appDB) @@ -255,7 +255,7 @@ func (b *nimbusStatusBackend) startNodeWithAccount(acc multiaccounts.Account, pa if err != nil { return err } - if err := logutils.OverrideRootLogWithConfig(conf, false); err != nil { + if err := logutils.OverrideRootLogWithConfig(conf, b.rootDataDir, false); err != nil { return err } accountsDB := accounts.NewDB(b.appDB) diff --git a/cmd/statusd/main.go b/cmd/statusd/main.go index 752b83ef2a6..2988faf97ad 100644 --- a/cmd/statusd/main.go +++ b/cmd/statusd/main.go @@ -203,7 +203,7 @@ func setupLogging(config *params.NodeConfig) { } colors := !(*logWithoutColors) && terminal.IsTerminal(int(os.Stdin.Fd())) - if err := logutils.OverrideRootLogWithConfig(config, colors); err != nil { + if err := logutils.OverrideRootLogWithConfig(config, "", colors); err != nil { stdlog.Fatalf("Error initializing logger: %v", err) } } diff --git a/lib/library.go b/lib/library.go index 1d23a68db15..e9baeed7a6f 100644 --- a/lib/library.go +++ b/lib/library.go @@ -326,7 +326,7 @@ func StartNode(configJSON *C.char) *C.char { return makeJSONResponse(err) } - if err := logutils.OverrideRootLogWithConfig(config, false); err != nil { + if err := logutils.OverrideRootLogWithConfig(config, statusBackend.rootDataDir, false); err != nil { return makeJSONResponse(err) } diff --git a/logutils/override.go b/logutils/override.go index 33c667905e5..40f2d06e19d 100644 --- a/logutils/override.go +++ b/logutils/override.go @@ -2,6 +2,7 @@ package logutils import ( "os" + "path/filepath" "strings" "github.com/ethereum/go-ethereum/log" @@ -15,15 +16,23 @@ func OverrideWithStdLogger(config *params.NodeConfig) error { } // OverrideRootLogWithConfig derives all configuration from params.NodeConfig and configures logger using it. -func OverrideRootLogWithConfig(config *params.NodeConfig, colors bool) error { +func OverrideRootLogWithConfig(config *params.NodeConfig, rootDataDir string, colors bool) error { if !config.LogEnabled { return nil } if config.LogMobileSystem { return OverrideWithStdLogger(config) } + + var logFile string + if len(config.LogDir) == 0 { + logFile = filepath.Join(rootDataDir, config.LogFile) + } else { + logFile = filepath.Join(config.LogDir, config.LogFile) + } + return OverrideRootLog(config.LogEnabled, config.LogLevel, FileOptions{ - Filename: config.LogFile, + Filename: logFile, MaxSize: config.LogMaxSize, MaxBackups: config.LogMaxBackups, Compress: config.LogCompressRotated, diff --git a/params/config.go b/params/config.go index bcd15885317..0e4c35bd4a7 100644 --- a/params/config.go +++ b/params/config.go @@ -386,6 +386,9 @@ type NodeConfig struct { // LogMobileSystem enables log redirection to android/ios system logger. LogMobileSystem bool + // LogFile is a folder which contains LogFile + LogDir string + // LogFile is filename where exposed logs get written to LogFile string