vspd/cmd/vspd/log.go
Jamie Holdstock 11401c5369
Move vspd into cmd directory. (#352)
* Update linter to 1.49.0

* Move vspd into cmd directory.

This is standard practise in Decred golang repos. Especially useful when multiple executables are built from a single repo.

* Ignore bins in new dir.
2022-09-27 08:54:23 -05:00

43 lines
1.1 KiB
Go

// Copyright (c) 2020-2022 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package main
import (
"fmt"
"os"
"path/filepath"
"github.com/decred/slog"
"github.com/jrick/logrotate/rotator"
)
// logWriter implements an io.Writer that outputs to both standard output and
// the write-end pipe of an initialized log rotator.
type logWriter struct {
rotator *rotator.Rotator
}
func (lw logWriter) Write(p []byte) (n int, err error) {
os.Stdout.Write(p)
return lw.rotator.Write(p)
}
func newLogBackend(logDir string, appName string, maxLogSize int64, logsToKeep int) (*slog.Backend, error) {
err := os.MkdirAll(logDir, 0700)
if err != nil {
return nil, fmt.Errorf("failed to create log directory: %w", err)
}
logFileName := fmt.Sprintf("%s.log", appName)
logFilePath := filepath.Join(logDir, logFileName)
r, err := rotator.New(logFilePath, maxLogSize*1024, false, logsToKeep)
if err != nil {
return nil, fmt.Errorf("failed to create log rotator: %w", err)
}
return slog.NewBackend(logWriter{r}), nil
}