From bce0b4a8a0dbf8a0a968a82cf062279de9ea42e6 Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 6 Jun 2024 18:19:17 +0300 Subject: [PATCH 1/4] feat(logging): add file output option for logging configuration --- README.md | 1 + internal/app/log.go | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/README.md b/README.md index c31ed748..faabfa6b 100644 --- a/README.md +++ b/README.md @@ -1213,6 +1213,7 @@ log: rtsp: warn streams: error webrtc: fatal + output: stdout # Available output options are: stdout, stderr, or a file path. ``` ## Security diff --git a/internal/app/log.go b/internal/app/log.go index 222f6f2b..79a5cbae 100644 --- a/internal/app/log.go +++ b/internal/app/log.go @@ -24,6 +24,19 @@ func NewLogger(config map[string]string) zerolog.Logger { writer = os.Stderr case "stdout": writer = os.Stdout + case "file": + filePath := config["file"] + if filePath == "" { + filePath = "go2rtc.log" + } + file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + log.Error().Msgf("failed to open log file %s: %v", filePath, err) + } + defer file.Close() + writer = file + default: + writer = os.Stdout } timeFormat := config["time"] From e46fc13feaf5291ab89ddc6b2dfa617d9596b022 Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 6 Jun 2024 18:25:30 +0300 Subject: [PATCH 2/4] fix(log): ensure fallback to stdout if log file open fails --- internal/app/log.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/app/log.go b/internal/app/log.go index 79a5cbae..b64c39c0 100644 --- a/internal/app/log.go +++ b/internal/app/log.go @@ -32,9 +32,10 @@ func NewLogger(config map[string]string) zerolog.Logger { file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { log.Error().Msgf("failed to open log file %s: %v", filePath, err) + writer = os.Stdout + } else { + writer = file } - defer file.Close() - writer = file default: writer = os.Stdout } From ac798d9d6d507a9e1f4fef6019b4dcd4c9d4a790 Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 6 Jun 2024 19:07:09 +0300 Subject: [PATCH 3/4] fix(log): handle log file open error by writing to stdout --- internal/app/log.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/app/log.go b/internal/app/log.go index b64c39c0..dd29ad06 100644 --- a/internal/app/log.go +++ b/internal/app/log.go @@ -31,7 +31,7 @@ func NewLogger(config map[string]string) zerolog.Logger { } file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { - log.Error().Msgf("failed to open log file %s: %v", filePath, err) + os.Stdout.WriteString("Error: Failed to open log file: " + err.Error() + ". Log output is set to stdout now.\n") writer = os.Stdout } else { writer = file From 7fd0ec8ce677e30dd4fb4fdb40cc4ae51b1ceed4 Mon Sep 17 00:00:00 2001 From: Alex X Date: Mon, 24 Feb 2025 15:21:37 +0300 Subject: [PATCH 4/4] Code refactoring for logs to file --- README.md | 1 - internal/app/log.go | 19 ++++++------------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index faabfa6b..c31ed748 100644 --- a/README.md +++ b/README.md @@ -1213,7 +1213,6 @@ log: rtsp: warn streams: error webrtc: fatal - output: stdout # Available output options are: stdout, stderr, or a file path. ``` ## Security diff --git a/internal/app/log.go b/internal/app/log.go index dd29ad06..713110e8 100644 --- a/internal/app/log.go +++ b/internal/app/log.go @@ -3,6 +3,7 @@ package app import ( "io" "os" + "strings" "github.com/mattn/go-isatty" "github.com/rs/zerolog" @@ -19,25 +20,17 @@ var MemoryLog = newBuffer(16) func NewLogger(config map[string]string) zerolog.Logger { var writer io.Writer - switch config["output"] { + switch output, path, _ := strings.Cut(config["output"], ":"); output { case "stderr": writer = os.Stderr case "stdout": writer = os.Stdout case "file": - filePath := config["file"] - if filePath == "" { - filePath = "go2rtc.log" + if path == "" { + path = "go2rtc.log" } - file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - os.Stdout.WriteString("Error: Failed to open log file: " + err.Error() + ". Log output is set to stdout now.\n") - writer = os.Stdout - } else { - writer = file - } - default: - writer = os.Stdout + // if fail - only MemoryLog will be available + writer, _ = os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) } timeFormat := config["time"]