From 6c7a800bf48749257688288edaf81471ee326324 Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 8 Jan 2026 14:53:08 +0100 Subject: [PATCH] fix: set log path before creating log handler (#2064) Resolves #2020 --- pkg/log/logging.go | 2 +- pkg/log/logging_test.go | 56 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 pkg/log/logging_test.go diff --git a/pkg/log/logging.go b/pkg/log/logging.go index 521ba27d2..e3bb6b098 100644 --- a/pkg/log/logging.go +++ b/pkg/log/logging.go @@ -87,9 +87,9 @@ func NewHTTPLogger(enabled bool, output string, format string) *slog.Logger { // ConfigureStandardLogger configures the global log handler func ConfigureStandardLogger(enabled bool, output string, path string, level string, format string) { + logPath = path handler, _ := makeLogHandler(enabled, output, level, format) logInstance = slog.New(handler) - logPath = path } // wrapLogger is used for libraries requiring a Debugf method. diff --git a/pkg/log/logging_test.go b/pkg/log/logging_test.go new file mode 100644 index 000000000..26192e071 --- /dev/null +++ b/pkg/log/logging_test.go @@ -0,0 +1,56 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package log + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestConfigureStandardLoggerWithPath(t *testing.T) { + tempDir := t.TempDir() + + ConfigureStandardLogger(true, "file", tempDir, "INFO", "text") + + // Verify log file was created in the correct location + expectedPath := filepath.Join(tempDir, "standard.log") + _, err := os.Stat(expectedPath) + require.NoError(t, err, "Log file should be created in configured path") + + // Verify NO log file was created in current directory + _, err = os.Stat("./standard.log") + assert.True(t, os.IsNotExist(err), "Log file should NOT be created in current directory") +} + +func TestConfigureStandardLoggerSetsPathBeforeHandler(t *testing.T) { + tempDir := t.TempDir() + + // This test verifies the fix for issue #2020 + // The path must be set BEFORE makeLogHandler is called + // so that file output goes to the correct location + ConfigureStandardLogger(true, "file", tempDir, "INFO", "text") + + // If the fix is correct, the file will be in tempDir + // If the fix is wrong, the file would be in "." (the old logPath value) + expectedPath := filepath.Join(tempDir, "standard.log") + _, err := os.Stat(expectedPath) + require.NoError(t, err, "Log file must be created in the configured path, not the default") +}