mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-04-25 22:19:35 -05:00
[server] loggers everywhere
This commit is contained in:
@@ -13,7 +13,6 @@ import (
|
||||
"codeberg.org/shroff/phylum/server/internal/db"
|
||||
"github.com/go-ldap/ldap/v3"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
@@ -34,7 +33,7 @@ type DNLookupConfig struct {
|
||||
}
|
||||
|
||||
type Auth struct {
|
||||
log zerolog.Logger
|
||||
logger zerolog.Logger
|
||||
url string
|
||||
hostName string
|
||||
startTLS bool
|
||||
@@ -48,13 +47,13 @@ type Auth struct {
|
||||
|
||||
var a Auth
|
||||
|
||||
func NewAuth(cfg Config, log zerolog.Logger) (*Auth, error) {
|
||||
a.log = log.With().Str("c", "ldap").Logger()
|
||||
func NewAuth(cfg Config, logger zerolog.Logger) (*Auth, error) {
|
||||
a.logger = logger.With().Str("mod", "ldap").Logger()
|
||||
if cfg.Debug {
|
||||
a.log = log.Level(zerolog.DebugLevel)
|
||||
a.logger = logger.Level(zerolog.DebugLevel)
|
||||
}
|
||||
|
||||
info := a.log.Debug()
|
||||
info := a.logger.Debug()
|
||||
if cfg.DNTemplate == "" {
|
||||
if cfg.DNLookup.BaseDN == "" {
|
||||
return nil, errors.New("base DN not set")
|
||||
@@ -109,7 +108,7 @@ func (a *Auth) newConn() (*ldap.Conn, error) {
|
||||
|
||||
conn, err := ldap.DialURL(a.url, ldap.DialWithDialer(dialer), ldap.DialWithTLSConfig(tlsCfg))
|
||||
if err != nil {
|
||||
log.Error().Err(err).Str("url", a.url).Msg("cannot contact directory server")
|
||||
a.logger.Error().Err(err).Str("url", a.url).Msg("cannot contact directory server")
|
||||
}
|
||||
|
||||
if a.readTimeout != 0 {
|
||||
|
||||
@@ -23,7 +23,7 @@ type Provider struct {
|
||||
var log zerolog.Logger
|
||||
|
||||
func Init(cfg Config, l zerolog.Logger) error {
|
||||
log = l.With().Str("c", "auth.openid").Logger()
|
||||
log = l.With().Str("mod", "auth.openid").Logger()
|
||||
for _, c := range cfg.Clients {
|
||||
clients[c.ID] = c
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ import (
|
||||
"github.com/knadh/koanf/providers/rawbytes"
|
||||
"github.com/knadh/koanf/v2"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
@@ -43,8 +42,8 @@ func SetupCommand() {
|
||||
Version: "0.4.0",
|
||||
}
|
||||
flags := cmd.PersistentFlags()
|
||||
logger := log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "15:04:05.999"})
|
||||
log.Logger = logger
|
||||
logger := zerolog.New(os.Stderr).With().Timestamp().Logger()
|
||||
logger = logger.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "15:04:05.999"})
|
||||
|
||||
// Flags only. Not part of config file
|
||||
flags.StringP("workdir", "W", "", "Working Directory")
|
||||
@@ -71,9 +70,9 @@ func SetupCommand() {
|
||||
uuid.EnableRandPool()
|
||||
cmd.PersistentPreRun = func(cmd *cobra.Command, args []string) {
|
||||
if cmd.Name() == "serve" {
|
||||
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
||||
logger = logger.Level(zerolog.InfoLevel)
|
||||
} else {
|
||||
zerolog.SetGlobalLevel(zerolog.WarnLevel)
|
||||
logger = logger.Level(zerolog.WarnLevel)
|
||||
}
|
||||
|
||||
dir, _ := cmd.Flags().GetString("workdir")
|
||||
@@ -114,10 +113,11 @@ func SetupCommand() {
|
||||
k.UnmarshalWithConf("", &cfg, koanf.UnmarshalConf{Tag: "koanf"})
|
||||
|
||||
if cfg.Debug {
|
||||
zerolog.SetGlobalLevel(zerolog.TraceLevel)
|
||||
logger = logger.Level(zerolog.TraceLevel)
|
||||
logger.Debug().Msg("Running in debug mode")
|
||||
cfg.Server.Debug = true
|
||||
}
|
||||
cmd.SetContext(logger.WithContext(cmd.Context()))
|
||||
|
||||
serve.Cfg = cfg.Server
|
||||
schema.DBConfig = cfg.DB
|
||||
@@ -153,7 +153,7 @@ func SetupCommand() {
|
||||
logger.Fatal().Err(err)
|
||||
}
|
||||
|
||||
if err := storage.Initialize(db.Get(ctx), cfg.Storage); err != nil {
|
||||
if err := storage.Initialize(db.Get(ctx), cfg.Storage, logger); err != nil {
|
||||
logger.Fatal().Err(err).Msg("failed to initialize storage")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ import (
|
||||
"github.com/gin-contrib/static"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
@@ -53,19 +52,21 @@ func SetupCommand() *cobra.Command {
|
||||
if !Cfg.Debug {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
}
|
||||
engine := createEngine()
|
||||
cmd.Context()
|
||||
logger := zerolog.Ctx(cmd.Context())
|
||||
engine := createEngine(logger)
|
||||
|
||||
if Cfg.WebDAV.Enabled {
|
||||
r := engine.Group(Cfg.WebDAV.Path)
|
||||
webdav.SetupHandler(r)
|
||||
log.Info().Str("path", r.BasePath()).Msg("WebDAV Enabled")
|
||||
logger.Info().Str("path", r.BasePath()).Msg("WebDAV Enabled")
|
||||
}
|
||||
apiv1.Setup(engine.Group("/api/v1"))
|
||||
publink.Setup(engine.Group(Cfg.PublinkPath))
|
||||
|
||||
setupWebApp(engine, "web")
|
||||
|
||||
setupTrashCompactor(log.Logger)
|
||||
setupTrashCompactor(logger)
|
||||
|
||||
listen := Cfg.Host + ":" + strconv.Itoa(Cfg.Port)
|
||||
server := http.Server{
|
||||
@@ -83,7 +84,7 @@ func SetupCommand() *cobra.Command {
|
||||
defer closeWG.Done()
|
||||
if err := server.ListenAndServe(); err != nil {
|
||||
if !errors.Is(err, http.ErrServerClosed) {
|
||||
log.Fatal().Err(err).Msg("failed to start server")
|
||||
logger.Fatal().Err(err).Msg("failed to start server")
|
||||
}
|
||||
}
|
||||
}()
|
||||
@@ -93,13 +94,13 @@ func SetupCommand() *cobra.Command {
|
||||
defer closeWG.Done()
|
||||
if err := steve.Get().Run(context.Background()); err != nil {
|
||||
if !errors.Is(err, steve.ErrShutdown) {
|
||||
log.Fatal().Err(err).Msg("failed to start jobs")
|
||||
logger.Fatal().Err(err).Msg("failed to start jobs")
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
<-sigChan
|
||||
log.Info().Msg("Shutting Down")
|
||||
logger.Info().Msg("Shutting Down")
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
go server.Shutdown(ctx)
|
||||
@@ -140,7 +141,7 @@ func setupWebApp(r gin.IRoutes, webAppSrcDir string) {
|
||||
r.Use(staticFileHandler)
|
||||
}
|
||||
|
||||
func setupTrashCompactor(logger zerolog.Logger) {
|
||||
func setupTrashCompactor(logger *zerolog.Logger) {
|
||||
ticker := time.NewTimer(24 * time.Hour)
|
||||
go func() {
|
||||
for {
|
||||
|
||||
@@ -7,11 +7,11 @@ import (
|
||||
"codeberg.org/shroff/phylum/server/internal/core"
|
||||
"github.com/gin-contrib/cors"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
// func createEngine(logBody bool, corsEnabled bool, corsOrigins []string) *gin.Engine {
|
||||
func createEngine() *gin.Engine {
|
||||
func createEngine(logger *zerolog.Logger) *gin.Engine {
|
||||
engine := gin.New()
|
||||
engine.Use(gin.Logger(), gin.CustomRecovery(func(c *gin.Context, err any) {
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
|
||||
@@ -21,12 +21,12 @@ func createEngine() *gin.Engine {
|
||||
})
|
||||
}))
|
||||
if Cfg.LogBody {
|
||||
engine.Use(logBodyMiddleware)
|
||||
engine.Use(createLogBodyMiddleware(logger))
|
||||
}
|
||||
|
||||
if Cfg.CORS.Enabled {
|
||||
origins := Cfg.CORS.Origins
|
||||
log.Info().Strs("origins", origins).Msg("Enabling CORS")
|
||||
logger.Info().Strs("origins", origins).Msg("Enabling CORS")
|
||||
engine.Use(cors.New(cors.Config{
|
||||
AllowOrigins: origins,
|
||||
AllowHeaders: []string{"Origin", "Authorization", "Accept", "Accept-Language", "Content-Type"},
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package serve
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
type logBodyWriter struct {
|
||||
gin.ResponseWriter
|
||||
body *bytes.Buffer
|
||||
}
|
||||
|
||||
func (w logBodyWriter) Write(b []byte) (int, error) {
|
||||
w.body.Write(b)
|
||||
return w.ResponseWriter.Write(b)
|
||||
}
|
||||
|
||||
func createLogBodyMiddleware(logger *zerolog.Logger) func(*gin.Context) {
|
||||
l := logger.With().Str("mod", "server.trace").Logger().Level(zerolog.TraceLevel)
|
||||
return func(c *gin.Context) {
|
||||
logBodyWriter := &logBodyWriter{
|
||||
ResponseWriter: c.Writer,
|
||||
body: bytes.NewBuffer(make([]byte, 0, 1024)),
|
||||
}
|
||||
c.Writer = logBodyWriter
|
||||
c.Next()
|
||||
l.Trace().Str("url", c.Request.URL.String()).Str("body", logBodyWriter.body.String()).Send()
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package serve
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type logBodyWriter struct {
|
||||
gin.ResponseWriter
|
||||
body *bytes.Buffer
|
||||
}
|
||||
|
||||
func (w logBodyWriter) Write(b []byte) (int, error) {
|
||||
w.body.Write(b)
|
||||
return w.ResponseWriter.Write(b)
|
||||
}
|
||||
|
||||
func logBodyMiddleware(c *gin.Context) {
|
||||
logBodyWriter := &logBodyWriter{
|
||||
ResponseWriter: c.Writer,
|
||||
body: bytes.NewBuffer(make([]byte, 0, 1024)),
|
||||
}
|
||||
c.Writer = logBodyWriter
|
||||
c.Next()
|
||||
log.Trace().Str("url", c.Request.URL.String()).Str("body", logBodyWriter.body.String()).Send()
|
||||
}
|
||||
@@ -81,7 +81,7 @@ func (f *FileSystem) TrashList(cursor string, n uint) ([]Resource, string, error
|
||||
}
|
||||
}
|
||||
|
||||
func TrashCompact(ctx context.Context, logger zerolog.Logger, duration time.Duration) {
|
||||
func TrashCompact(ctx context.Context, logger *zerolog.Logger, duration time.Duration) {
|
||||
t := time.Now().Add(-duration)
|
||||
logger.Info().Str("older", t.Format(time.RFC1123)).Msg("deleting old files")
|
||||
f := openOmniscient(db.Get(ctx))
|
||||
|
||||
@@ -58,7 +58,7 @@ func Close() {
|
||||
}
|
||||
}
|
||||
|
||||
func Connect(ctx context.Context, cfg Config, log zerolog.Logger) (*pgxpool.Pool, error) {
|
||||
func Connect(ctx context.Context, cfg Config, logger zerolog.Logger) (*pgxpool.Pool, error) {
|
||||
var dsn strings.Builder
|
||||
dsn.WriteString("host=" + cfg.Host)
|
||||
dsn.WriteString(" port=" + strconv.Itoa(cfg.Port))
|
||||
@@ -75,7 +75,7 @@ func Connect(ctx context.Context, cfg Config, log zerolog.Logger) (*pgxpool.Pool
|
||||
|
||||
if cfg.Trace {
|
||||
config.ConnConfig.Tracer = tracer{
|
||||
log: log.With().Str("c", "db.trace").Logger(),
|
||||
log: logger.With().Str("mod", "db.trace").Logger().Level(zerolog.TraceLevel),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ func Connect(ctx context.Context, cfg Config, log zerolog.Logger) (*pgxpool.Pool
|
||||
return nil, errors.New("failed to connect to database: " + err.Error())
|
||||
}
|
||||
|
||||
log.Debug().
|
||||
logger.Debug().
|
||||
Str("host", config.ConnConfig.Host+":"+strconv.Itoa(int(config.ConnConfig.Port))).
|
||||
Str("db", config.ConnConfig.Database).
|
||||
Msg("Connected to database")
|
||||
|
||||
@@ -51,7 +51,7 @@ func Initialize(ctx context.Context, pool *pgxpool.Pool, log zerolog.Logger) err
|
||||
|
||||
notifier := notifier{
|
||||
mu: sync.RWMutex{},
|
||||
log: log.With().Str("c", "notifier").Logger(),
|
||||
log: log.With().Str("mod", "notifier").Logger(),
|
||||
listener: listener,
|
||||
subscriptions: make(map[string][]*subscription),
|
||||
pendingOps: []pendingOp{},
|
||||
|
||||
@@ -2,8 +2,6 @@ package pubsub
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type Subscription interface {
|
||||
@@ -34,7 +32,7 @@ func (s *subscription) EstablishedC() <-chan struct{} { return s.establishedChan
|
||||
func (s *subscription) Cancel() {
|
||||
s.unlistenOnce.Do(func() {
|
||||
if err := s.notifier.unsubscribe(s); err != nil {
|
||||
log.Warn().Err(err).Str("channel", s.channelName).Msg("failed to cancel subscription")
|
||||
s.notifier.log.Warn().Err(err).Str("channel", s.channelName).Msg("failed to cancel subscription")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"codeberg.org/shroff/phylum/server/internal/db"
|
||||
"codeberg.org/shroff/phylum/server/internal/pubsub"
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
const DefaultBackendName = "_"
|
||||
@@ -25,7 +25,7 @@ type BackendConfig struct {
|
||||
Params map[string]string `json:"params"`
|
||||
}
|
||||
|
||||
func Initialize(db db.Handler, cfg Config) error {
|
||||
func Initialize(db db.Handler, cfg Config, logger zerolog.Logger) error {
|
||||
storageRoot = cfg.Root
|
||||
|
||||
if err := os.MkdirAll(storageRoot, 0o700); err != nil {
|
||||
@@ -58,7 +58,7 @@ func Initialize(db db.Handler, cfg Config) error {
|
||||
defaultBackend = b
|
||||
}
|
||||
|
||||
go processBackendUpdates()
|
||||
go processBackendUpdates(logger)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -139,15 +139,15 @@ func restoreBackends(db db.Handler) (map[string]Backend, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func processBackendUpdates() {
|
||||
func processBackendUpdates(logger zerolog.Logger) {
|
||||
sub := pubsub.Get().Listen("backend_updates")
|
||||
for {
|
||||
p := <-sub.NotificationC()
|
||||
var c BackendConfig
|
||||
if err := json.Unmarshal([]byte(p), &c); err != nil {
|
||||
log.Warn().Err(err).Msg("failed to unmarshal backend config")
|
||||
logger.Warn().Err(err).Msg("failed to unmarshal backend config")
|
||||
} else if b, err := c.open(); err != nil {
|
||||
log.Warn().Err(err).Msg("failed to open backend")
|
||||
logger.Warn().Err(err).Msg("failed to open backend")
|
||||
} else {
|
||||
backends[c.Name] = b
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user