add logger

This commit is contained in:
pakintada@gmail.com 2023-09-22 11:00:35 +07:00
parent fda22acffe
commit a5f4d48aad
5 changed files with 88 additions and 0 deletions

View file

@ -14,6 +14,8 @@ require (
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/natefinch/lumberjack v2.0.0+incompatible
github.com/natefinch/lumberjack/v3 v3.0.0-alpha // indirect
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/spf13/afero v1.9.5 // indirect
github.com/spf13/cast v1.5.1 // indirect
@ -21,6 +23,8 @@ require (
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.16.0 // indirect
github.com/subosito/gotenv v1.4.2 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect
golang.org/x/net v0.15.0 // indirect
golang.org/x/sys v0.12.0 // indirect
golang.org/x/text v0.13.0 // indirect

View file

@ -140,6 +140,10 @@ github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0V
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
github.com/natefinch/lumberjack/v3 v3.0.0-alpha h1:HZ2AJF20D1lo9S0F/rpgkFbPGam5dgR3X0KUtZA5mlY=
github.com/natefinch/lumberjack/v3 v3.0.0-alpha/go.mod h1:rPTlHhMjhrvPAhqKh0FC57E0pXZoanrXgMDj4yv5wcM=
github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@ -179,6 +183,10 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=

View file

@ -14,15 +14,21 @@ import (
"recipe-manager/data"
"recipe-manager/models"
"recipe-manager/routers"
"recipe-manager/services/logger"
"recipe-manager/services/oauth"
"strings"
"github.com/go-chi/chi/v5"
"github.com/go-chi/cors"
"github.com/spf13/viper"
"go.uber.org/zap"
"golang.org/x/oauth2"
)
var (
Log = logger.GetInstance()
)
func loadConfig(path string) (*config.ServerConfig, error) {
viper.AddConfigPath(path)
viper.SetConfigName("app")
@ -69,8 +75,12 @@ func NewServer() *Server {
func (s *Server) Run() error {
// logger
// defer log_inst.Sync()
s.createHandler()
log.Printf("Server running on %s", s.server.Addr)
Log.Info("Server running", zap.String("addr", s.server.Addr))
return s.server.ListenAndServe()
}
@ -124,6 +134,9 @@ func (s *Server) createHandler() {
}
ctx := context.WithValue(r.Context(), "user", user)
Log.Info("User is authenticated", zap.String("user", user.Name))
next.ServeHTTP(w, r.WithContext(ctx))
})
})

View file

@ -0,0 +1,57 @@
package logger
import (
"os"
"github.com/natefinch/lumberjack"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
log_inst = NewLogger()
log_file_config = zapcore.AddSync(&lumberjack.Logger{
Filename: "services/logger/serverlog.log",
MaxSize: 500, // megabytes
MaxBackups: 3,
MaxAge: 28, //days
})
json_enc = zapcore.NewJSONEncoder(zapcore.EncoderConfig{
TimeKey: "timestamp",
LevelKey: "level",
NameKey: "logger",
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
})
console_enc = zapcore.NewConsoleEncoder(zapcore.EncoderConfig{
TimeKey: "timestamp",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "message",
StacktraceKey: "error",
EncodeLevel: zapcore.CapitalColorLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
})
)
func createLogggerConfig() *zap.Logger {
log_level := zap.NewAtomicLevelAt(zap.InfoLevel)
log_core := zapcore.NewTee(
zapcore.NewCore(json_enc, log_file_config, log_level),
zapcore.NewCore(console_enc, zapcore.AddSync(os.Stdout), log_level),
)
return zap.New(log_core)
}
func NewLogger() *zap.Logger {
log := createLogggerConfig()
defer log.Sync()
return log
}
func GetInstance() *zap.Logger {
return log_inst
}

View file

@ -0,0 +1,6 @@
{"level":"info","timestamp":"2023-09-22T10:58:35.135+0700","addr":":8080"}
{"level":"info","timestamp":"2023-09-22T10:58:47.594+0700","user":"pakin tadatanasakul"}
{"level":"info","timestamp":"2023-09-22T10:59:55.661+0700","user":"pakin tadatanasakul"}
{"level":"info","timestamp":"2023-09-22T10:59:59.995+0700","user":"pakin tadatanasakul"}
{"level":"info","timestamp":"2023-09-22T11:00:00.056+0700","user":"pakin tadatanasakul"}
{"level":"info","timestamp":"2023-09-22T11:00:07.558+0700","user":"pakin tadatanasakul"}