From 3d2230223f72383868670765d693030b01574b30 Mon Sep 17 00:00:00 2001 From: Bharath Vedartham Date: Fri, 22 Mar 2024 21:02:08 +0530 Subject: [PATCH] create the log file along with its parent directory if not present (#12675) * Remove Feature Flag From Prater (#12082) * Use Epoch boundary cache to retrieve balances (#12083) * Use Epoch boundary cache to retrieve balances * save boundary states before inserting to forkchoice * move up last block save * remove boundary checks on balances * fix ordering --------- Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> * create the log file along with its parent directory if not present * only give ReadWritePermissions to the log file * use io/file package to create the parent directories * fix ci related issues * add regression tests * run gazelle * fix tests * remove print statements * gazelle * Remove failing test for MkdirAll, this failure is not expected --------- Co-authored-by: Nishant Das Co-authored-by: Potuz Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> Co-authored-by: Preston Van Loon --- io/logs/BUILD.bazel | 1 + io/logs/logutil.go | 5 +++++ io/logs/logutil_test.go | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/io/logs/BUILD.bazel b/io/logs/BUILD.bazel index 140b7553c..24f61e9e1 100644 --- a/io/logs/BUILD.bazel +++ b/io/logs/BUILD.bazel @@ -13,6 +13,7 @@ go_library( "//cache/lru:go_default_library", "//config/params:go_default_library", "//crypto/rand:go_default_library", + "//io/file:go_default_library", "@com_github_hashicorp_golang_lru//:go_default_library", "@com_github_sirupsen_logrus//:go_default_library", ], diff --git a/io/logs/logutil.go b/io/logs/logutil.go index ea510da64..7d81fbfb1 100644 --- a/io/logs/logutil.go +++ b/io/logs/logutil.go @@ -6,9 +6,11 @@ import ( "io" "net/url" "os" + "path/filepath" "strings" "github.com/prysmaticlabs/prysm/v5/config/params" + "github.com/prysmaticlabs/prysm/v5/io/file" "github.com/sirupsen/logrus" ) @@ -20,6 +22,9 @@ func addLogWriter(w io.Writer) { // ConfigurePersistentLogging adds a log-to-file writer. File content is identical to stdout. func ConfigurePersistentLogging(logFileName string) error { logrus.WithField("logFileName", logFileName).Info("Logs will be made persistent") + if err := file.MkdirAll(filepath.Dir(logFileName)); err != nil { + return err + } f, err := os.OpenFile(logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, params.BeaconIoConfig().ReadWritePermissions) // #nosec G304 if err != nil { return err diff --git a/io/logs/logutil_test.go b/io/logs/logutil_test.go index 1863922f5..0612f6798 100644 --- a/io/logs/logutil_test.go +++ b/io/logs/logutil_test.go @@ -1,6 +1,8 @@ package logs import ( + "fmt" + "os" "testing" "github.com/prysmaticlabs/prysm/v5/testing/require" @@ -24,3 +26,38 @@ func TestMaskCredentialsLogging(t *testing.T) { require.Equal(t, MaskCredentialsLogging(test.url), test.maskedUrl) } } + +func TestConfigurePersistantLogging(t *testing.T) { + testParentDir := t.TempDir() + + // 1. Test creation of file in an existing parent directory + logFileName := "test.log" + existingDirectory := "test-1-existing-testing-dir" + + err := ConfigurePersistentLogging(fmt.Sprintf("%s/%s/%s", testParentDir, existingDirectory, logFileName)) + require.NoError(t, err) + + // 2. Test creation of file along with parent directory + nonExistingDirectory := "test-2-non-existing-testing-dir" + + err = ConfigurePersistentLogging(fmt.Sprintf("%s/%s/%s", testParentDir, nonExistingDirectory, logFileName)) + require.NoError(t, err) + + // 3. Test creation of file in an existing parent directory with a non-existing sub-directory + existingDirectory = "test-3-existing-testing-dir" + nonExistingSubDirectory := "test-3-non-existing-sub-dir" + err = os.Mkdir(fmt.Sprintf("%s/%s", testParentDir, existingDirectory), 0700) + if err != nil { + return + } + + err = ConfigurePersistentLogging(fmt.Sprintf("%s/%s/%s/%s", testParentDir, existingDirectory, nonExistingSubDirectory, logFileName)) + require.NoError(t, err) + + //4. Create log file in a directory without 700 permissions + existingDirectory = "test-4-existing-testing-dir" + err = os.Mkdir(fmt.Sprintf("%s/%s", testParentDir, existingDirectory), 0750) + if err != nil { + return + } +}