Skip to content

Commit c8087e0

Browse files
committed
fix: Fallback to file log on demonize if no syslog
1 parent cd8351c commit c8087e0

File tree

6 files changed

+63
-30
lines changed

6 files changed

+63
-30
lines changed

core/cfg/logger.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
"github.com/tigrisdata/tigrisfs/log"
2424
)
2525

26-
func InitLoggers(flags *FlagStorage) {
26+
func InitLoggers(flags *FlagStorage) error {
2727
lf := flags.LogFile
2828
if lf == "" {
2929
lf = "stderr"
@@ -32,7 +32,10 @@ func InitLoggers(flags *FlagStorage) {
3232
}
3333
}
3434

35-
log.InitLoggerRedirect(lf)
35+
err := log.InitLoggerRedirect(lf, len(flags.LogFile) == 0)
36+
if err != nil {
37+
return err
38+
}
3639

3740
log.DefaultLogConfig = &log.LogConfig{
3841
Level: flags.LogLevel,
@@ -51,4 +54,6 @@ func InitLoggers(flags *FlagStorage) {
5154
log.SetLoggersConfig(log.DefaultLogConfig)
5255

5356
// log.DumpLoggers("InitLoggers")
57+
58+
return nil
5459
}

log/dup_default.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
package log
1919

2020
import (
21-
"golang.org/x/sys/unix"
2221
"io"
2322
"log/syslog"
2423
"os"
24+
25+
"golang.org/x/sys/unix"
2526
)
2627

2728
func redirectStdout(target *os.File) error {
@@ -32,10 +33,6 @@ func redirectStderr(target *os.File) error {
3233
return unix.Dup2(int(target.Fd()), int(os.Stderr.Fd()))
3334
}
3435

35-
func InitSyslog() io.Writer {
36-
lf, err := syslog.New(syslog.LOG_INFO, "tigrisfs")
37-
if err != nil {
38-
Fatal().Err(err).Msg("Failed to connect to syslog")
39-
}
40-
return lf
36+
func InitSyslog() (io.Writer, error) {
37+
return syslog.New(syslog.LOG_INFO, "tigrisfs")
4138
}

log/dup_windows.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ func redirectStderr(target *os.File) error {
3838
return err
3939
}
4040

41-
func InitSyslog() io.Writer {
42-
return logWriter
41+
func InitSyslog() (io.Writer, error) {
42+
return logWriter, nil
4343
}

log/log.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ func Error() *zerolog.Event {
2222
return defaultLog.Error()
2323
}
2424

25+
func Warn() *zerolog.Event {
26+
return defaultLog.Warn()
27+
}
28+
2529
func Info() *zerolog.Event {
2630
return defaultLog.Info()
2731
}

log/logger.go

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,30 +42,42 @@ var (
4242

4343
var logWriter io.Writer = os.Stderr
4444

45-
func logStderr(msg string, args ...any) {
46-
_, _ = fmt.Fprintf(os.Stderr, msg, args...)
47-
}
45+
func InitLoggerRedirect(logFileName string, defLog bool) error {
46+
if logFileName == "stderr" || logFileName == "/dev/stderr" || logFileName == "" {
47+
return nil
48+
}
4849

49-
func InitLoggerRedirect(logFileName string) {
5050
if logFileName == "syslog" {
51-
logWriter = InitSyslog()
52-
} else if logFileName != "stderr" && logFileName != "/dev/stderr" && logFileName != "" {
5351
var err error
54-
lf, err := os.OpenFile(logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o666)
55-
if err != nil {
56-
logStderr("Couldn't open file %v for writing logs", logFileName)
57-
return
58-
}
59-
if err = redirectStdout(lf); err != nil {
60-
logStderr("Couldn't redirect STDOUT to the log file %v", logFileName)
61-
return
52+
logWriter, err = InitSyslog()
53+
if err == nil {
54+
return nil
6255
}
63-
if err = redirectStderr(lf); err != nil {
64-
logStderr("Couldn't redirect STDERR to the log file %v", logFileName)
65-
return
56+
57+
if !defLog {
58+
return err
6659
}
67-
logWriter = lf
60+
61+
// log file is not set and we are deamonizing redirect to default file location
62+
Warn().Err(err).Msg("failed to open syslog. redirecting logs to /var/log/tigrisfs.log")
63+
logFileName = "/var/log/tigrisfs.log"
64+
}
65+
66+
var err error
67+
lf, err := os.OpenFile(logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o666)
68+
if err != nil {
69+
return fmt.Errorf("couldn't open file %v for writing logs: %w", logFileName, err)
70+
}
71+
if err = redirectStdout(lf); err != nil {
72+
return fmt.Errorf("couldn't redirect STDOUT to the log file %v: %w", logFileName, err)
6873
}
74+
if err = redirectStderr(lf); err != nil {
75+
return fmt.Errorf("couldn't redirect STDERR to the log file %v: %w", logFileName, err)
76+
}
77+
78+
logWriter = lf
79+
80+
return nil
6981
}
7082

7183
func SetCloudLogLevel(level zerolog.Level) {

main.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
"github.com/tigrisdata/tigrisfs/core"
2929
"github.com/tigrisdata/tigrisfs/core/cfg"
30+
"github.com/tigrisdata/tigrisfs/lib"
3031
"github.com/tigrisdata/tigrisfs/log"
3132
"github.com/urfave/cli"
3233

@@ -112,7 +113,13 @@ func main() {
112113
}
113114
}
114115

115-
cfg.InitLoggers(flags)
116+
err = cfg.InitLoggers(flags)
117+
if err != nil {
118+
if !flags.Foreground {
119+
daemonizer.NotifySuccess(false)
120+
}
121+
mainLog.Fatal().Err(err).Msg("Unable to initialize logger")
122+
}
116123

117124
mainLog.Debug().Interface("flags", flags).Msg("config")
118125

@@ -143,12 +150,20 @@ func main() {
143150
if err != nil {
144151
if !flags.Foreground {
145152
daemonizer.NotifySuccess(false)
153+
// if demonized but started from terminal show error to the user
154+
if lib.IsTTY(os.Stderr) {
155+
_, _ = fmt.Fprintf(os.Stderr, "Mounting file system failed: %v\n", err)
156+
}
146157
}
147158
mainLog.Fatal().Err(err).Msg("Mounting file system failed")
148159
// fatal also terminates itself
149160
} else {
150161
mainLog.Info().Msg("File system has been successfully mounted.")
151162
if !flags.Foreground {
163+
// if demonized but started from terminal show success to the user
164+
if lib.IsTTY(os.Stderr) {
165+
_, _ = fmt.Fprintf(os.Stderr, "File system has been successfully mounted\n")
166+
}
152167
daemonizer.NotifySuccess(true)
153168
mainLog.Debug().Msg("Process is daemonized. Closing stdout and stderr.")
154169
mainLog.E(os.Stderr.Close())

0 commit comments

Comments
 (0)