[server] loggers everywhere

This commit is contained in:
Abhishek Shroff
2025-07-09 00:29:25 +05:30
parent 49772d3231
commit da07ffa914
12 changed files with 70 additions and 69 deletions
+6 -7
View File
@@ -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 {
+1 -1
View File
@@ -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
}
+7 -7
View File
@@ -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")
}
}
+9 -8
View File
@@ -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 {
+4 -4
View File
@@ -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"},
+31
View File
@@ -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()
}
}
-28
View File
@@ -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()
}
+1 -1
View File
@@ -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))
+3 -3
View File
@@ -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")
+1 -1
View File
@@ -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{},
+1 -3
View File
@@ -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")
}
})
}
+6 -6
View File
@@ -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
}