diff --git a/.gitea/workflows/test-pr.yaml b/.gitea/workflows/test-pr.yaml index 33a868a..85bee5b 100644 --- a/.gitea/workflows/test-pr.yaml +++ b/.gitea/workflows/test-pr.yaml @@ -1,6 +1,9 @@ -name: PR Check +name: CI on: - - pull_request + pull_request: + push: + branches: + - master jobs: check-and-test: @@ -10,6 +13,6 @@ jobs: - uses: actions/setup-go@main with: go-version-file: 'go.mod' - - run: go mod tidy + - run: go mod tidy - run: go build ./... - - run: go test -race -v -shuffle=on ./... \ No newline at end of file + - run: go test -race -v -shuffle=on ./... diff --git a/go.mod b/go.mod index a1462d3..95ce2ac 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module teleport -go 1.23.5 +go 1.26.0 require ( github.com/miekg/dns v1.1.68 diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go index c4db03f..2fa5873 100644 --- a/pkg/logger/logger.go +++ b/pkg/logger/logger.go @@ -27,28 +27,24 @@ type Config struct { Compress bool `yaml:"compress"` // compress backup files } -// Init initializes the global logger with the given configuration -func Init(config Config) error { - mu.Lock() - defer mu.Unlock() - - Log = logrus.New() +func newLogger(config Config) (*logrus.Logger, error) { + l := logrus.New() // Set log level level, err := logrus.ParseLevel(config.Level) if err != nil { level = logrus.InfoLevel } - Log.SetLevel(level) + l.SetLevel(level) // Set log format with sanitization switch config.Format { case "json": - Log.SetFormatter(&SanitizedJSONFormatter{ + l.SetFormatter(&SanitizedJSONFormatter{ TimestampFormat: "2006-01-02 15:04:05", }) default: - Log.SetFormatter(&SanitizedTextFormatter{ + l.SetFormatter(&SanitizedTextFormatter{ FullTimestamp: true, TimestampFormat: "2006-01-02 15:04:05", }) @@ -59,36 +55,49 @@ func Init(config Config) error { // Ensure directory exists dir := filepath.Dir(config.File) if err := os.MkdirAll(dir, 0755); err != nil { - return err + return nil, err } // Open log file with secure permissions (owner read/write only) file, err := os.OpenFile(config.File, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) if err != nil { - return err + return nil, err } // Set output to both file and stdout - Log.SetOutput(io.MultiWriter(file, os.Stdout)) + l.SetOutput(io.MultiWriter(file, os.Stdout)) } else { - Log.SetOutput(os.Stdout) + l.SetOutput(os.Stdout) } + return l, nil +} + +// Init initializes the global logger with the given configuration +func Init(config Config) error { + l, err := newLogger(config) + if err != nil { + return err + } + + mu.Lock() + Log = l + mu.Unlock() return nil } // GetLogger returns the global logger instance func GetLogger() *logrus.Logger { mu.RLock() - if Log != nil { - mu.RUnlock() - return Log - } + l := Log mu.RUnlock() + if l != nil { + return l + } // Initialize with default config if not already initialized once.Do(func() { - Init(Config{ + _ = Init(Config{ Level: "info", Format: "text", File: "",