From 1dd61ccbca07736b55d0eb68ac7805d6f524a00f Mon Sep 17 00:00:00 2001 From: Simon Ding Date: Fri, 26 Jul 2024 14:22:08 +0800 Subject: [PATCH] feat: add log level setting --- db/const.go | 1 + db/db.go | 5 +++++ server/server.go | 3 ++- server/setting.go | 20 ++++++-------------- ui/lib/providers/settings.dart | 22 +++++++++++++--------- ui/lib/system_settings.dart | 27 +++++++++++++++++++++++++-- 6 files changed, 52 insertions(+), 26 deletions(-) diff --git a/db/const.go b/db/const.go index 95277c2..36fd9c2 100644 --- a/db/const.go +++ b/db/const.go @@ -6,6 +6,7 @@ const ( SettingJacketUrl = "jacket_url" SettingJacketApiKey = "jacket_api_key" SettingDownloadDir = "download_dir" + SettingLogLevel = "log_level" ) const ( diff --git a/db/db.go b/db/db.go index 3176585..abfc0cf 100644 --- a/db/db.go +++ b/db/db.go @@ -57,6 +57,11 @@ func (c *Client) init() { log.Infof("set default download dir") c.SetSetting(downloadDir, "/downloads") } + logLevel := c.GetSetting(SettingLogLevel) + if logLevel == "" { + log.Infof("set default log level") + c.SetSetting(SettingLogLevel, "info") + } } func (c *Client) generateJwtSerectIfNotExist() { diff --git a/server/server.go b/server/server.go index ab44fae..45cfc33 100644 --- a/server/server.go +++ b/server/server.go @@ -49,6 +49,8 @@ func (s *Server) Serve() error { s.r.Use(ginzap.Ginzap(log.Logger().Desugar(), time.RFC3339, false)) s.r.Use(ginzap.RecoveryWithZap(log.Logger().Desugar(), true)) + log.SetLogLevel(s.db.GetSetting(db.SettingLogLevel)) //restore log level + s.r.POST("/api/login", HttpHandler(s.Login)) api := s.r.Group("/api/v1") @@ -62,7 +64,6 @@ func (s *Server) Serve() error { setting.GET("/general", HttpHandler(s.GetSetting)) setting.POST("/auth", HttpHandler(s.EnableAuth)) setting.GET("/auth", HttpHandler(s.GetAuthSetting)) - setting.POST("/loglevel", HttpHandler(s.SetLogLevel)) } activity := api.Group("/activity") { diff --git a/server/setting.go b/server/setting.go index 984844e..6b379ca 100644 --- a/server/setting.go +++ b/server/setting.go @@ -35,6 +35,10 @@ func (s *Server) SetSetting(c *gin.Context) (interface{}, error) { } if in.LogLevel != "" { log.SetLogLevel(in.LogLevel) + if err := s.db.SetSetting(db.SettingLogLevel, in.LogLevel); err != nil { + return nil, errors.Wrap(err, "save log level") + } + } return nil, nil } @@ -42,10 +46,11 @@ func (s *Server) SetSetting(c *gin.Context) (interface{}, error) { func (s *Server) GetSetting(c *gin.Context) (interface{}, error) { tmdb := s.db.GetSetting(db.SettingTmdbApiKey) downloadDir := s.db.GetSetting(db.SettingDownloadDir) - + logLevel := s.db.GetSetting(db.SettingLogLevel) return &GeneralSettings{ TmdbApiKey: tmdb, DownloadDir: downloadDir, + LogLevel: logLevel, }, nil } @@ -146,16 +151,3 @@ func (s *Server) DeleteDownloadCLient(c *gin.Context) (interface{}, error) { s.db.DeleteDownloadCLient(id) return "success", nil } - -type logLovelIn struct { - Level string `json:"level"` -} - -func (s *Server) SetLogLevel(c *gin.Context) (interface{}, error) { - var in logLovelIn - if err := c.ShouldBindJSON(&in); err != nil { - return nil, errors.Wrap(err, "bind json") - } - log.SetLogLevel(in.Level) - return "success", nil -} diff --git a/ui/lib/providers/settings.dart b/ui/lib/providers/settings.dart index 3da910b..e20aefd 100644 --- a/ui/lib/providers/settings.dart +++ b/ui/lib/providers/settings.dart @@ -49,18 +49,22 @@ class EditSettingData extends AutoDisposeAsyncNotifier { class GeneralSetting { String? tmdbApiKey; String? downloadDIr; + String? logLevel; - GeneralSetting({this.tmdbApiKey, this.downloadDIr}); + GeneralSetting({this.tmdbApiKey, this.downloadDIr, this.logLevel}); factory GeneralSetting.fromJson(Map json) { return GeneralSetting( - tmdbApiKey: json["tmdb_api_key"], downloadDIr: json["download_dir"]); + tmdbApiKey: json["tmdb_api_key"], + downloadDIr: json["download_dir"], + logLevel: json["log_level"]); } Map toJson() { final Map data = {}; data['tmdb_api_key'] = tmdbApiKey; data['download_dir'] = downloadDIr; + data["log_level"] = logLevel; return data; } } @@ -257,13 +261,13 @@ class StorageSettingData extends AutoDisposeAsyncNotifier> { } class Storage { - Storage( - {this.id, - this.name, - this.implementation, - this.settings, - this.isDefault, - }); + Storage({ + this.id, + this.name, + this.implementation, + this.settings, + this.isDefault, + }); final int? id; final String? name; diff --git a/ui/lib/system_settings.dart b/ui/lib/system_settings.dart index 07aba42..aadc182 100644 --- a/ui/lib/system_settings.dart +++ b/ui/lib/system_settings.dart @@ -37,9 +37,11 @@ class _SystemSettingsPageState extends ConsumerState { autovalidateMode: AutovalidateMode.onUserInteraction, initialValue: { "tmdb_api": v.tmdbApiKey, - "download_dir": v.downloadDIr + "download_dir": v.downloadDIr, + "log_level": v.logLevel }, child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ FormBuilderTextField( name: "tmdb_api", @@ -57,6 +59,26 @@ class _SystemSettingsPageState extends ConsumerState { // validator: FormBuilderValidators.required(), ), + SizedBox( + width: 300, + child: FormBuilderDropdown( + name: "log_level", + decoration: const InputDecoration( + labelText: "日志级别", + icon: Icon(Icons.file_present_rounded), + ), + items: const [ + DropdownMenuItem( + value: "debug", child: Text("Debug")), + DropdownMenuItem(value: "info", child: Text("Info")), + DropdownMenuItem( + value: "warn", child: Text("Warnning")), + DropdownMenuItem( + value: "error", child: Text("Error")), + ], + validator: FormBuilderValidators.required(), + ), + ), Center( child: Padding( padding: const EdgeInsets.only(top: 28.0), @@ -72,7 +94,8 @@ class _SystemSettingsPageState extends ConsumerState { .read(settingProvider.notifier) .updateSettings(GeneralSetting( tmdbApiKey: values["tmdb_api"], - downloadDIr: values["download_dir"])); + downloadDIr: values["download_dir"], + logLevel: values["log_level"])); f.then((v) { Utils.showSnakeBar("更新成功"); }).onError((e, s) {