improved logging

This commit is contained in:
ston1th 2022-09-19 22:52:40 +02:00
commit 05b41cedce
81 changed files with 9802 additions and 279 deletions

View file

@ -6,20 +6,22 @@ import (
"encoding/json"
"errors"
"fmt"
"git.giftfish.de/ston1th/docstore/pkg/core"
"git.giftfish.de/ston1th/docstore/pkg/db"
"git.giftfish.de/ston1th/docstore/pkg/log"
"git.giftfish.de/ston1th/docstore/pkg/scan"
"git.giftfish.de/ston1th/docstore/pkg/server"
"git.giftfish.de/ston1th/godrop/v2"
"github.com/urfave/cli"
stdlog "log"
"net"
"os"
"os/signal"
"path/filepath"
"strconv"
"syscall"
"time"
"git.giftfish.de/ston1th/docstore/pkg/core"
"git.giftfish.de/ston1th/docstore/pkg/db"
"git.giftfish.de/ston1th/docstore/pkg/scan"
"git.giftfish.de/ston1th/docstore/pkg/server"
"git.giftfish.de/ston1th/godrop/v2"
"github.com/go-logr/logr"
"github.com/go-logr/zerologr"
"github.com/rs/zerolog"
"github.com/urfave/cli"
)
const (
@ -72,15 +74,18 @@ func initServer(cfg *core.Config) (err error) {
return
}
log.InitLogger(cfg)
log, err := logFileLogger(cfg)
if err != nil {
return
}
cfg.DataDir = filepath.Join(cfg.RunDir, core.DataDir)
debugCfg := new(core.Config)
*debugCfg = *cfg
debugCfg.Secret = "***hidden***"
log.Debugf("docstore config: %+v", debugCfg)
debugCfg.Secret = "[redacted]"
log.V(2).Info("docstore config", "cfg", debugCfg)
scanner, err := scan.New(cfg)
scanner, err := scan.New(log.WithName("scanner"), cfg)
if err != nil {
return errors.New("scanner: " + err.Error())
}
@ -93,25 +98,21 @@ func initServer(cfg *core.Config) (err error) {
return
}
srv := server.NewHTTPServer(cfg, l, scanner)
srv := server.NewHTTPServer(log, cfg, l, scanner)
err = srv.Start()
if err != nil {
return
}
log.Println("docstore " + cfg.Version + " started")
log.Info("docstore started", "version", cfg.Version)
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
sig := <-sigs
log.Println("signal: " + sig.String())
go func() {
time.Sleep(time.Second * 20)
log.Fatal("stop timed out: killing")
}()
<-sigs
log.Info("docstore shutdown initiated")
err = srv.Stop()
if err != nil {
log.Println(err)
log.Error(err, "shutdown")
}
log.Println("docstore stopped")
log.Info("docstore shutdown completed")
return
}
@ -127,6 +128,9 @@ func loadConfig() error {
if err != nil {
return err
}
if config.Debug {
zerolog.SetGlobalLevel(zerolog.TraceLevel)
}
if config.RunDir == "" {
config.RunDir = defRunDir
}
@ -154,6 +158,47 @@ func loadConfig() error {
return file.Close()
}
func fatal(err error) {
log.Error(err, "init failed")
os.Exit(1)
}
var (
log logr.Logger
zl zerolog.Logger
)
func logFileLogger(cfg *core.Config) (l logr.Logger, err error) {
f, err := os.OpenFile(filepath.Join(cfg.DataDir, cfg.LogFile), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o640)
if err != nil {
return
}
zln := zl.Output(f)
l = zerologr.New(&zln)
return
}
func init() {
//zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs
zerolog.CallerMarshalFunc = func(pc uintptr, file string, line int) string {
short := file
for i := len(file) - 1; i > 0; i-- {
if file[i] == '/' {
short = file[i+1:]
break
}
}
file = short
return file + ":" + strconv.Itoa(line)
}
//zerologr.NameFieldName = "logger"
//zerologr.NameSeparator = "/"
zerologr.VerbosityFieldName = ""
zl = zerolog.New(os.Stderr)
zl = zl.With().Caller().Timestamp().Logger()
log = zerologr.New(&zl)
}
func Run(version string) {
app := cli.NewApp()
app.Name = "docstore"
@ -167,11 +212,11 @@ func Run(version string) {
Action: func(c *cli.Context) error {
config.Langs = c.StringSlice("langs")
if err := loadConfig(); err != nil {
stdlog.Fatal("server: ", err)
fatal(err)
}
config.Version = app.Version
if err := initServer(&config); err != nil {
stdlog.Fatal("server: ", err)
fatal(err)
}
return nil
},
@ -182,30 +227,30 @@ func Run(version string) {
Flags: defaultFlags(nil),
Action: func(c *cli.Context) error {
if err := loadConfig(); err != nil {
stdlog.Fatal("reset: ", err)
fatal(err)
}
DB, err := db.NewPlain(&config)
DB, err := db.NewPlain(log.WithName("db"), &config)
if err != nil {
stdlog.Fatal("reset: ", err)
fatal(err)
}
u, err := DB.GetUser()
if err != nil {
stdlog.Fatal("reset: ", err)
fatal(err)
}
fmt.Println("username:", u.Username)
pw, err := password()
if err != nil {
stdlog.Fatal("reset: ", err)
fatal(err)
}
if err = DB.UpdateUserPassword(pw); err != nil {
stdlog.Fatal("reset: ", err)
fatal(err)
}
fmt.Println("password:", pw)
if err = DB.UpdateUserSecret(""); err != nil {
stdlog.Fatal("reset: ", err)
fatal(err)
}
if err = DB.Close(); err != nil {
stdlog.Fatal("reset: ", err)
fatal(err)
}
return nil
},
@ -220,25 +265,25 @@ func Run(version string) {
err error
)
if err = loadConfig(); err != nil {
stdlog.Fatal("dump: ", err)
fatal(err)
}
if dumpFile != "-" {
file, err = os.OpenFile(dumpFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o640)
if err != nil {
stdlog.Fatal("dump: ", err)
fatal(err)
}
}
DB, err := db.NewPlain(&config)
DB, err := db.NewPlain(log.WithName("db"), &config)
if err != nil {
stdlog.Fatal("dump: ", err)
fatal(err)
}
if err = DB.Dump(file); err != nil {
stdlog.Fatal("dump: ", err)
fatal(err)
}
file.Close()
err = DB.Close()
if err != nil {
stdlog.Fatal("dump: ", err)
fatal(err)
}
return nil
},
@ -253,25 +298,25 @@ func Run(version string) {
err error
)
if err = loadConfig(); err != nil {
stdlog.Fatal("restore: ", err)
fatal(err)
}
if dumpFile != "-" {
file, err = os.Open(dumpFile)
if err != nil {
stdlog.Fatal("restore: ", err)
fatal(err)
}
}
DB, err := db.NewPlain(&config)
DB, err := db.NewPlain(log.WithName("db"), &config)
if err != nil {
stdlog.Fatal("restore: ", err)
fatal(err)
}
if err = DB.Restore(file); err != nil {
stdlog.Fatal("restore: ", err)
fatal(err)
}
file.Close()
err = DB.Close()
if err != nil {
stdlog.Fatal("restore: ", err)
fatal(err)
}
return nil
},