142
pkg/log/logging.go
Normal file
142
pkg/log/logging.go
Normal file
@@ -0,0 +1,142 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
var (
|
||||
logger zerolog.Logger
|
||||
wineLogger zerolog.Logger
|
||||
)
|
||||
|
||||
func SetupLogging() {
|
||||
// App logs
|
||||
path, err := getLogfilePath()
|
||||
if err != nil {
|
||||
log.Error().Err(err).Str("path", path).Msg("Failed to get log path")
|
||||
return
|
||||
}
|
||||
|
||||
var mw io.Writer
|
||||
l := createLogWriter(path, 10, 3)
|
||||
if l != nil {
|
||||
mw = io.MultiWriter(zerolog.ConsoleWriter{Out: os.Stdout}, l)
|
||||
} else {
|
||||
mw = io.MultiWriter(zerolog.ConsoleWriter{Out: os.Stdout})
|
||||
}
|
||||
logger = zerolog.New(mw).With().Timestamp().Logger()
|
||||
SetLevelInfo()
|
||||
|
||||
// Wine logs
|
||||
wineLogPath, err := getWineLogfilePath()
|
||||
if err != nil {
|
||||
Errorf("Failed to get wine log path: %v", err)
|
||||
return
|
||||
}
|
||||
l = createLogWriter(wineLogPath, 25, 1)
|
||||
if l != nil {
|
||||
mw = io.MultiWriter(zerolog.ConsoleWriter{Out: os.Stdout}, l)
|
||||
} else {
|
||||
mw = io.MultiWriter(zerolog.ConsoleWriter{Out: os.Stdout})
|
||||
}
|
||||
wineLogger = zerolog.New(mw).With().Timestamp().Logger()
|
||||
wineLogger.Level(zerolog.InfoLevel)
|
||||
}
|
||||
|
||||
func createLogWriter(path string, maxSize int, maxBackups int) io.Writer {
|
||||
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
|
||||
log.Error().Err(err).Str("path", path).Msg("Failed to create log path")
|
||||
return nil
|
||||
}
|
||||
|
||||
return &lumberjack.Logger{
|
||||
Filename: path,
|
||||
MaxSize: maxSize,
|
||||
MaxBackups: maxBackups,
|
||||
}
|
||||
}
|
||||
|
||||
func SetLevelDebug() {
|
||||
logger.Level(zerolog.DebugLevel)
|
||||
}
|
||||
|
||||
func SetLevelInfo() {
|
||||
logger.Level(zerolog.InfoLevel)
|
||||
}
|
||||
|
||||
func getLogfilePath() (string, error) {
|
||||
dir, err := os.UserConfigDir()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return filepath.Join(dir, "EpochSilicon", "epochsilicon.log"), nil
|
||||
}
|
||||
|
||||
func getWineLogfilePath() (string, error) {
|
||||
dir, err := os.UserConfigDir()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return filepath.Join(dir, "EpochSilicon", "epochsilicon.log"), nil
|
||||
}
|
||||
|
||||
func Debug(msg string) {
|
||||
logger.Debug().Msg(msg)
|
||||
}
|
||||
|
||||
func Debugf(format string, args ...interface{}) {
|
||||
logger.Debug().Msgf(format, args...)
|
||||
}
|
||||
|
||||
func Info(msg string) {
|
||||
logger.Info().Msg(msg)
|
||||
}
|
||||
|
||||
func Infof(format string, args ...interface{}) {
|
||||
logger.Info().Msgf(format, args...)
|
||||
}
|
||||
|
||||
func Warn(msg string) {
|
||||
logger.Warn().Msg(msg)
|
||||
}
|
||||
|
||||
func Warnf(format string, args ...interface{}) {
|
||||
logger.Warn().Msgf(format, args...)
|
||||
}
|
||||
|
||||
func Error(msg string) {
|
||||
logger.Error().Msg(msg)
|
||||
}
|
||||
|
||||
func Errorf(format string, args ...interface{}) {
|
||||
logger.Error().Msgf(format, args...)
|
||||
}
|
||||
|
||||
func Fatal(msg string) {
|
||||
logger.Fatal().Msg(msg)
|
||||
}
|
||||
|
||||
func Fatalf(format string, args ...interface{}) {
|
||||
logger.Fatal().Msgf(format, args...)
|
||||
}
|
||||
|
||||
func Panic(msg string) {
|
||||
logger.Panic().Msg(msg)
|
||||
}
|
||||
|
||||
func Panicf(format string, args ...interface{}) {
|
||||
logger.Panic().Msgf(format, args...)
|
||||
}
|
||||
|
||||
func WineLoggerStdout(msg string) {
|
||||
wineLogger.Info().Msgf("STDOUT: %s", msg)
|
||||
}
|
||||
|
||||
func WineLoggerStderr(msg string) {
|
||||
wineLogger.Info().Msgf("STDERR: %s", msg)
|
||||
}
|
Reference in New Issue
Block a user