76 lines
1.5 KiB
Go
76 lines
1.5 KiB
Go
package logging
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"git.sr.ht/~cco/go-scopes/config"
|
|
"git.sr.ht/~cco/go-scopes/lib"
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
const (
|
|
DebugLevel = zerolog.DebugLevel
|
|
InfoLevel = zerolog.InfoLevel
|
|
WarnLevel = zerolog.WarnLevel
|
|
ErrorLevel = zerolog.ErrorLevel
|
|
)
|
|
|
|
var Levels = map[string]zerolog.Level{}
|
|
|
|
type Logger = zerolog.Logger
|
|
|
|
var globalLogger *Logger = &log.Logger
|
|
|
|
type Cfg struct {
|
|
*config.BaseCfg
|
|
Logfile string
|
|
Level string
|
|
}
|
|
|
|
func Setup(ctx lib.Context, cfg *Cfg, home string) {
|
|
if cfg == nil {
|
|
return // use unchanged predefined logger
|
|
}
|
|
if logger, err := New(cfg, home); err != nil {
|
|
panic("error when trying to set up logger.")
|
|
} else {
|
|
*globalLogger = *logger
|
|
}
|
|
}
|
|
|
|
func New(cfg *Cfg, home string) (*Logger, error) {
|
|
home, _ = filepath.Abs(home)
|
|
fn := cfg.Logfile
|
|
if fn == "" {
|
|
fn = filepath.Join(home, "log", "scopes.log")
|
|
} else if !filepath.IsAbs(fn) {
|
|
fn = filepath.Join(home, fn)
|
|
}
|
|
f, err := os.OpenFile(fn, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0664)
|
|
if err != nil {
|
|
GetLogger(nil).Err(err).Msg("logging.New: open log file")
|
|
return nil, err
|
|
}
|
|
lc := zerolog.New(f).With().Timestamp()
|
|
// TODO: evaluate cfg.Level
|
|
// lc.Level(level)
|
|
logger := lc.Logger()
|
|
return &logger, nil
|
|
}
|
|
|
|
func GetLogger(ctx lib.Context) *Logger {
|
|
if ctx == nil {
|
|
return globalLogger
|
|
}
|
|
// return ctx.Logger()
|
|
return globalLogger
|
|
}
|
|
|
|
func init() {
|
|
Levels["debug"] = DebugLevel
|
|
Levels["info"] = InfoLevel
|
|
Levels["warn"] = WarnLevel
|
|
Levels["error"] = ErrorLevel
|
|
}
|