improve: log fields

This commit is contained in:
Mmx
2024-09-25 21:48:07 +08:00
parent d9d09bfc33
commit a3e28d3696
15 changed files with 103 additions and 66 deletions

View File

@@ -6,10 +6,12 @@ import (
"github.com/Mmx233/BackoffCli/backoff"
"github.com/Mmx233/BitSrunLoginGo/internal/config"
"github.com/Mmx233/BitSrunLoginGo/internal/config/flags"
"github.com/Mmx233/BitSrunLoginGo/internal/config/keys"
"github.com/Mmx233/BitSrunLoginGo/internal/pkg/dns"
"github.com/Mmx233/BitSrunLoginGo/internal/pkg/http_client"
"github.com/Mmx233/BitSrunLoginGo/pkg/srun"
"github.com/Mmx233/BitSrunLoginGo/tools"
log "github.com/sirupsen/logrus"
"net/http"
"sync"
"time"
@@ -18,10 +20,18 @@ import (
var ipLast string
var debugTip sync.Once
func Login() error {
logger := config.Logger
type LoginConf struct {
Logger log.FieldLogger
IsOnlineDetectLogDebugLevel bool
}
func Login(conf LoginConf) error {
logger := conf.Logger
if config.Settings.Basic.Interfaces == "" { //单网卡
err := LoginSingle(nil, true)
err := LoginSingle(LoginSingleConf{
LoginConf: conf,
Eth: nil,
})
if err != nil {
logger.Errorln("登录出错: ", err)
debugTip.Do(func() {
@@ -32,13 +42,13 @@ func Login() error {
}
return err
} else { //多网卡
return LoginInterfaces()
return LoginInterfaces(conf)
}
}
func ddns(ip string, httpClient *http.Client) error {
func ddns(logger log.FieldLogger, ip string, httpClient *http.Client) error {
return dns.Run(&dns.Config{
Logger: config.Logger,
Logger: logger.WithField(keys.LogLoginModule, "ddns"),
Provider: config.Settings.DDNS.Provider,
IP: ip,
Domain: config.Settings.DDNS.Domain,
@@ -48,8 +58,8 @@ func ddns(ip string, httpClient *http.Client) error {
})
}
func LoginInterfaces() error {
logger := config.Logger
func LoginInterfaces(conf LoginConf) error {
logger := conf.Logger
interfaces, err := tools.GetInterfaceAddr(logger, config.Settings.Basic.Interfaces)
if err != nil {
return err
@@ -58,8 +68,11 @@ func LoginInterfaces() error {
var errCount int
for i, eth := range interfaces {
logger.Infoln("使用网卡: ", eth.Name)
if err := LoginSingle(&eth, false); err != nil {
config.Logger.Errorf("网卡 %s 登录出错: %v", eth.Name, err)
if err := LoginSingle(LoginSingleConf{
LoginConf: conf,
Eth: &eth,
}); err != nil {
logger.Errorf("网卡 %s 登录出错: %v", eth.Name, err)
errCount++
}
if i != len(interfaces)-1 {
@@ -72,21 +85,26 @@ func LoginInterfaces() error {
return nil
}
func LoginSingle(eth *tools.Eth, debugOutput bool) error {
type LoginSingleConf struct {
LoginConf
Eth *tools.Eth
}
func LoginSingle(conf LoginSingleConf) error {
if config.Settings.Backoff.Enable {
return backoff.NewInstance(func(ctx context.Context) error {
return doLogin(eth, debugOutput)
return doLogin(conf)
}, config.BackoffConfig).Run(context.TODO())
} else {
return doLogin(eth, debugOutput)
return doLogin(conf)
}
}
func doLogin(eth *tools.Eth, debugOutput bool) error {
logger := config.Logger
func doLogin(conf LoginSingleConf) error {
logger := conf.Logger
// 登录配置初始化
httpClient := http_client.HttpPackSelect(eth).Client
httpClient := http_client.HttpPackSelect(conf.Eth).Client
srunClient := srun.New(&srun.Conf{
Logger: logger,
Https: config.Settings.Basic.Https,
@@ -103,6 +121,8 @@ func doLogin(eth *tools.Eth, debugOutput bool) error {
// Reality 与 Acid
var acidOnReality bool
if config.Settings.Reality.Enable {
logger := logger.WithField(keys.LogLoginModule, "reality")
logger.Debugln("开始 Reality 流程")
acid, _, err := srunDetector.Reality(config.Settings.Reality.Addr, flags.AutoAcid)
if err != nil {
@@ -114,13 +134,15 @@ func doLogin(eth *tools.Eth, debugOutput bool) error {
}
}
if !acidOnReality && flags.AutoAcid {
logger.Debugln("开始嗅探 acid")
logger := logger.WithField(keys.LogLoginModule, "acid")
logger.Debugln("开始嗅探")
acid, err := srunDetector.DetectAcid()
if err != nil {
if errors.Is(err, srun.ErrAcidCannotFound) {
logger.Warnln("找不到 acid使用配置 acid")
} else {
logger.Warnf("嗅探 acid 失败,使用配置 acid: %v", err)
logger.Warnf("嗅探失败,使用配置 acid: %v", err)
}
} else {
logger.Debugf("使用嗅探 acid: %s", acid)
@@ -129,13 +151,15 @@ func doLogin(eth *tools.Eth, debugOutput bool) error {
}
if flags.AutoEnc {
logger.Debugln("开始嗅探 enc")
logger := logger.WithField(keys.LogLoginModule, "enc")
logger.Debugln("开始嗅探")
enc, err := srunDetector.DetectEnc()
if err != nil {
if errors.Is(err, srun.ErrEnvCannotFound) {
logger.Warnln("找不到 enc使用配置 enc")
} else {
logger.Warnf("嗅探 enc 失败,使用配置 enc: %v", err)
logger.Warnf("嗅探失败,使用配置 enc: %v", err)
}
} else {
logger.Debugf("使用嗅探 enc: %s", enc)
@@ -144,14 +168,14 @@ func doLogin(eth *tools.Eth, debugOutput bool) error {
}
// 选择输出函数
var output func(args ...interface{})
if debugOutput {
output = logger.Debugln
var _Println func(args ...interface{})
if conf.IsOnlineDetectLogDebugLevel {
_Println = logger.Debugln
} else {
output = logger.Infoln
_Println = logger.Infoln
}
output("正在获取登录状态")
_Println("正在获取登录状态")
online, ip, err := srunClient.LoginStatus()
if err != nil {
@@ -170,10 +194,10 @@ func doLogin(eth *tools.Eth, debugOutput bool) error {
// 登录执行
if online {
output("已登录~")
_Println("已登录~")
if config.Settings.DDNS.Enable && config.Settings.Guardian.Enable && ipLast != ip {
if ddns(ip, httpClient) == nil {
if ddns(logger, ip, httpClient) == nil {
ipLast = ip
}
}
@@ -189,7 +213,7 @@ func doLogin(eth *tools.Eth, debugOutput bool) error {
logger.Infoln("登录成功~")
if config.Settings.DDNS.Enable {
_ = ddns(ip, httpClient)
_ = ddns(logger, ip, httpClient)
}
}