@@ -2,9 +2,7 @@ package main
22
33import (
44 "context"
5- "fmt"
6- "log"
7- "log/slog"
5+ "os"
86 "time"
97 "tinyauth-analytics/internal/controller"
108 "tinyauth-analytics/internal/middleware"
@@ -13,6 +11,8 @@ import (
1311
1412 "github.com/gin-contrib/cors"
1513 "github.com/gin-gonic/gin"
14+ "github.com/rs/zerolog"
15+ "github.com/rs/zerolog/log"
1616 "github.com/spf13/viper"
1717 "gorm.io/gorm"
1818)
@@ -30,10 +30,7 @@ type config struct {
3030}
3131
3232func main () {
33- logger := slog .New (slog .NewTextHandler (log .Writer (), & slog.HandlerOptions {
34- Level : slog .LevelInfo ,
35- }))
36- slog .SetDefault (logger )
33+ log .Logger = log .Output (zerolog.ConsoleWriter {Out : os .Stderr , TimeFormat : time .RFC3339 }).With ().Timestamp ().Caller ().Logger ().Level (zerolog .FatalLevel )
3734
3835 v := viper .New ()
3936
@@ -50,40 +47,41 @@ func main() {
5047 var conf config
5148
5249 if err := v .Unmarshal (& conf ); err != nil {
53- slog . Error ( "failed to parse config" , "error" , err )
50+ log . Fatal (). Err ( err ). Msg ( "failed to parse config" )
5451 }
5552
5653 switch conf .LogLevel {
5754 case "debug" :
58- slog . SetLogLoggerLevel ( slog . LevelDebug )
55+ log . Level ( zerolog . DebugLevel )
5956 case "info" :
60- slog . SetLogLoggerLevel ( slog . LevelInfo )
57+ log . Level ( zerolog . InfoLevel )
6158 case "warn" :
62- slog . SetLogLoggerLevel ( slog . LevelWarn )
59+ log . Level ( zerolog . WarnLevel )
6360 case "error" :
64- slog .SetLogLoggerLevel (slog .LevelError )
61+ log .Level (zerolog .ErrorLevel )
62+ case "fatal" :
63+ log .Level (zerolog .FatalLevel )
6564 default :
66- slog . Error ( "invalid log level" , "level" , conf .LogLevel )
65+ log . Fatal (). Str ( " level" , conf .LogLevel ). Msg ( "invalid log level" )
6766 }
6867
6968 dbSvc := service .NewDatabaseService (service.DatabaseServiceConfig {
7069 DatabasePath : conf .DatabasePath ,
7170 })
7271
7372 if err := dbSvc .Init (); err != nil {
74- slog . Error ( "failed to initialize database" , "error" , err )
73+ log . Fatal (). Err ( err ). Msg ( "failed to initialize database" )
7574 }
7675
7776 db := dbSvc .GetDatabase ()
7877
7978 cacheSvc := service .NewCacheService ()
8079
80+ zerologMiddleware := middleware .NewZerologMiddleware (log .Logger .GetLevel ())
81+
8182 engine := gin .Default ()
8283 engine .Use (gin .Recovery ())
83-
84- if conf .LogLevel == "debug" || conf .LogLevel == "info" {
85- engine .Use (gin .Logger ())
86- }
84+ engine .Use (zerologMiddleware .Middleware ())
8785
8886 engine .Use (cors .New (
8987 cors.Config {
@@ -107,10 +105,10 @@ func main() {
107105
108106 go clearOldSessions (db )
109107
110- slog .Info ("starting analytics server " , "address" , conf .Address , "port" , conf . Port , " version" , version )
108+ log .Info (). Str ( "port " , conf . Port ). Str ( "address" , conf .Address ). Msg ( "starting server, version " + version )
111109
112110 if err := engine .Run (conf .Address + ":" + conf .Port ); err != nil {
113- slog . Error ( "failed to start server" , " error", err )
111+ log . Fatal (). Err ( err ). Msg ( " server error" )
114112 }
115113}
116114
@@ -119,17 +117,17 @@ func clearOldSessions(db *gorm.DB) {
119117 defer ticker .Stop ()
120118
121119 for ; true ; <- ticker .C {
122- slog .Info ("clearing old sessions" )
120+ log .Info (). Msg ("clearing old sessions" )
123121
124122 ctx := context .Background ()
125123 cutoffTime := time .Now ().Add (time .Duration (- 48 ) * time .Hour ).UnixMilli ()
126124 rowsAffected , err := gorm.G [model.Instance ](db ).Where ("last_seen < ?" , cutoffTime ).Delete (ctx )
127125
128126 if err != nil {
129- slog .Warn ("failed to clear old sessions: " , "error" , err )
127+ log .Warn (). Err ( err ). Msg ( "failed to clear old sessions" )
130128 continue
131129 }
132130
133- slog .Info (fmt . Sprintf ("cleared %d old sessions" , rowsAffected ) )
131+ log .Info (). Msgf ("cleared %d old sessions" , rowsAffected )
134132 }
135133}
0 commit comments