Remove the use of reflection to close log files

This commit is contained in:
Gerhard Tan
2025-07-19 18:38:50 +08:00
parent 77eee96005
commit 7a8d1f59ba
3 changed files with 27 additions and 14 deletions

View File

@ -10,6 +10,7 @@ import (
"github.com/fatedier/frp/pkg/config" "github.com/fatedier/frp/pkg/config"
"github.com/fatedier/frp/pkg/config/v1" "github.com/fatedier/frp/pkg/config/v1"
"github.com/fatedier/frp/pkg/util/log" "github.com/fatedier/frp/pkg/util/log"
glog "github.com/fatedier/golib/log"
"github.com/koho/frpmgr/pkg/consts" "github.com/koho/frpmgr/pkg/consts"
) )
@ -20,6 +21,7 @@ type FrpClientService struct {
cfg *v1.ClientCommonConfig cfg *v1.ClientCommonConfig
done chan struct{} done chan struct{}
statusExporter client.StatusExporter statusExporter client.StatusExporter
logger *glog.RotateFileWriter
} }
func NewFrpClientService(cfgFile string) (*FrpClientService, error) { func NewFrpClientService(cfgFile string) (*FrpClientService, error) {
@ -36,13 +38,14 @@ func NewFrpClientService(cfgFile string) (*FrpClientService, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
log.InitLogger(cfg.Log.To, cfg.Log.Level, int(cfg.Log.MaxDays), cfg.Log.DisablePrintColor) logger := initLogger(cfg.Log.To, cfg.Log.Level, int(cfg.Log.MaxDays))
return &FrpClientService{ return &FrpClientService{
svr: svr, svr: svr,
file: cfgFile, file: cfgFile,
cfg: cfg, cfg: cfg,
done: make(chan struct{}), done: make(chan struct{}),
statusExporter: svr.StatusExporter(), statusExporter: svr.StatusExporter(),
logger: logger,
}, nil }, nil
} }
@ -102,3 +105,21 @@ func (s *FrpClientService) GetProxyStatus(name string) (status *proxy.WorkingSta
} }
return return
} }
func initLogger(logPath string, levelStr string, maxDays int) *glog.RotateFileWriter {
var options []glog.Option
writer := glog.NewRotateFileWriter(glog.RotateFileConfig{
FileName: logPath,
Mode: glog.RotateFileModeDaily,
MaxDays: maxDays,
})
writer.Init()
options = append(options, glog.WithOutput(writer))
level, err := glog.ParseLevel(levelStr)
if err != nil {
level = glog.InfoLevel
}
options = append(options, glog.WithLevel(level))
log.Logger = log.Logger.WithOptions(options...)
return writer
}

View File

@ -2,25 +2,16 @@ package services
import ( import (
"os" "os"
"reflect"
"unsafe"
frpconfig "github.com/fatedier/frp/pkg/config" frpconfig "github.com/fatedier/frp/pkg/config"
"github.com/fatedier/frp/pkg/config/v1/validation" "github.com/fatedier/frp/pkg/config/v1/validation"
"github.com/fatedier/frp/pkg/util/log"
glog "github.com/fatedier/golib/log"
"github.com/koho/frpmgr/pkg/config"
"github.com/koho/frpmgr/pkg/util" "github.com/koho/frpmgr/pkg/util"
) )
func deleteFrpConfig(serviceName string, configPath string, c *config.ClientConfig) { func deleteFrpFiles(serviceName, configPath, logFile string) {
// Delete logs // Delete logs
logWriter := reflect.ValueOf(log.Logger).Elem().FieldByName("out") if logs, _, err := util.FindLogFiles(logFile); err == nil {
if writer, ok := reflect.NewAt(logWriter.Type(), unsafe.Pointer(logWriter.UnsafeAddr())).Elem().Interface().(*glog.RotateFileWriter); ok {
writer.Close()
}
if logs, _, err := util.FindLogFiles(c.LogFile); err == nil {
util.DeleteFiles(logs) util.DeleteFiles(logs)
} }
// Delete config file // Delete config file

View File

@ -53,7 +53,7 @@ func (service *frpService) Execute(args []string, r <-chan svc.ChangeRequest, ch
switch err { switch err {
case nil: case nil:
if t <= 0 { if t <= 0 {
deleteFrpConfig(args[0], service.configPath, cc) deleteFrpFiles(args[0], service.configPath, cc.LogFile)
return return
} }
expired = time.After(t) expired = time.After(t)
@ -102,7 +102,8 @@ func (service *frpService) Execute(args []string, r <-chan svc.ChangeRequest, ch
return return
case <-expired: case <-expired:
svr.Stop(false) svr.Stop(false)
deleteFrpConfig(args[0], service.configPath, cc) svr.logger.Close()
deleteFrpFiles(args[0], service.configPath, cc.LogFile)
return return
} }
} }