diff --git a/go.mod b/go.mod index a483c20..e8354b9 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,10 @@ require ( require github.com/adrg/strutil v0.3.1 -require github.com/gin-contrib/zap v1.1.3 // indirect +require ( + github.com/gin-contrib/zap v1.1.3 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect +) require ( ariga.io/atlas v0.19.1-0.20240203083654-5948b60a8e43 // indirect @@ -74,6 +77,7 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/natefinch/lumberjack v2.0.0+incompatible github.com/pkg/errors v0.9.1 github.com/spf13/viper v1.19.0 go.uber.org/multierr v1.11.0 // indirect diff --git a/go.sum b/go.sum index deb1548..ca68294 100644 --- a/go.sum +++ b/go.sum @@ -104,6 +104,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +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/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -195,6 +197,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/log/log.go b/log/log.go index d6c6fa0..97fec4e 100644 --- a/log/log.go +++ b/log/log.go @@ -4,6 +4,7 @@ import ( "path/filepath" "strings" + "github.com/natefinch/lumberjack" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -16,20 +17,22 @@ const dataPath = "./data" func init() { atom = zap.NewAtomicLevel() atom.SetLevel(zap.DebugLevel) - filer, _, err := zap.Open(filepath.Join(dataPath, "polaris.log")) - if err != nil { - panic(err) - } + + w := zapcore.AddSync(&lumberjack.Logger{ + Filename: filepath.Join(dataPath, "logs", "polaris.log"), + MaxSize: 50, // megabytes + MaxBackups: 3, + MaxAge: 30, // days + }) + consoleEncoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig()) - - logger := zap.New(zapcore.NewCore(consoleEncoder, zapcore.Lock(filer), atom), zap.AddCallerSkip(1)) + + logger := zap.New(zapcore.NewCore(consoleEncoder, w, atom), zap.AddCallerSkip(1)) sugar = logger.Sugar() } - - func SetLogLevel(l string) { switch strings.TrimSpace(strings.ToLower(l)) { case "debug": diff --git a/server/setting.go b/server/setting.go index fbf256c..984844e 100644 --- a/server/setting.go +++ b/server/setting.go @@ -14,6 +14,7 @@ import ( type GeneralSettings struct { TmdbApiKey string `json:"tmdb_api_key"` DownloadDir string `json:"download_dir"` + LogLevel string `json:"log_level"` } func (s *Server) SetSetting(c *gin.Context) (interface{}, error) { @@ -32,6 +33,9 @@ func (s *Server) SetSetting(c *gin.Context) (interface{}, error) { return nil, errors.Wrap(err, "save download dir") } } + if in.LogLevel != "" { + log.SetLogLevel(in.LogLevel) + } return nil, nil } @@ -97,7 +101,6 @@ func (s *Server) getDownloadClient() (*transmission.Client, error) { return trc, nil } - type downloadClientIn struct { Name string `json:"name" binding:"required"` URL string `json:"url" binding:"required"` @@ -113,8 +116,8 @@ func (s *Server) AddDownloadClient(c *gin.Context) (interface{}, error) { } //test connection _, err := transmission.NewClient(transmission.Config{ - URL: in.URL, - User: in.User, + URL: in.URL, + User: in.User, Password: in.Password, }) if err != nil { @@ -155,4 +158,4 @@ func (s *Server) SetLogLevel(c *gin.Context) (interface{}, error) { } log.SetLogLevel(in.Level) return "success", nil -} \ No newline at end of file +}