Skip to content

Commit

Permalink
refine logegr #60
Browse files Browse the repository at this point in the history
  • Loading branch information
Ehco1996 committed Jul 1, 2022
1 parent 89365f7 commit 2d02908
Show file tree
Hide file tree
Showing 22 changed files with 242 additions and 171 deletions.
98 changes: 67 additions & 31 deletions cmd/ehco/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,33 @@ import (

"github.com/getsentry/sentry-go"
cli "github.com/urfave/cli/v2"
"go.uber.org/zap"

"github.com/Ehco1996/ehco/internal/config"
"github.com/Ehco1996/ehco/internal/constant"
"github.com/Ehco1996/ehco/internal/logger"
"github.com/Ehco1996/ehco/internal/relay"
"github.com/Ehco1996/ehco/internal/tls"
"github.com/Ehco1996/ehco/internal/web"
"github.com/Ehco1996/ehco/pkg/log"
"github.com/Ehco1996/ehco/pkg/xray"
)

var LocalAddr string
var ListenType string
var TCPRemoteAddr string
var UDPRemoteAddr string
var TransportType string
var ConfigPath string
var WebPort int
var WebToken string
var EnablePing bool
var SystemFilePath = "/etc/systemd/system/ehco.service"
// flags
var (
LocalAddr string
ListenType string
TCPRemoteAddr string
UDPRemoteAddr string
TransportType string
ConfigPath string
WebPort int
WebToken string
EnablePing bool
SystemFilePath = "/etc/systemd/system/ehco.service"
LogLevel string
)

var cmdLogger *zap.SugaredLogger

const SystemDTMPL = `# Ehco service
[Unit]
Expand Down Expand Up @@ -124,6 +131,13 @@ func createCliAPP() *cli.App {
EnvVars: []string{"EHCO_WEB_TOKEN"},
Destination: &WebToken,
},
&cli.StringFlag{
Name: "log_level",
Usage: "log level",
EnvVars: []string{"EHCO_LOG_LEVEL"},
Destination: &WebToken,
DefaultText: "info",
},
}

app.Commands = []*cli.Command{
Expand All @@ -135,7 +149,7 @@ func createCliAPP() *cli.App {
if _, err := os.Stat(SystemFilePath); err != nil && os.IsNotExist(err) {
f, _ := os.OpenFile(SystemFilePath, os.O_CREATE|os.O_WRONLY, 0644)
if _, err := f.WriteString(SystemDTMPL); err != nil {
logger.Fatal(err)
cmdLogger.Fatal(err)
}
f.Close()
}
Expand Down Expand Up @@ -163,6 +177,7 @@ func loadConfig() (cfg *config.Config, err error) {
WebToken: WebToken,
EnablePing: EnablePing,
PATH: ConfigPath,
LogLeveL: LogLevel,
RelayConfigs: []config.RelayConfig{
{
Listen: LocalAddr,
Expand Down Expand Up @@ -235,7 +250,7 @@ func startRelayServers(ctx context.Context, cfg *config.Config) error {
case err := <-errCH:
return err
case <-ctx.Done():
logger.Info("[relay]start to stop relay servers")
cmdLogger.Info("[relay]start to stop relay servers")
relayM.Range(func(key, value interface{}) bool {
r := value.(*relay.Relay)
r.Close()
Expand All @@ -246,7 +261,7 @@ func startRelayServers(ctx context.Context, cfg *config.Config) error {
}

func watchAndReloadConfig(ctx context.Context, relayM *sync.Map, errCh chan error) {
logger.Errorf("[cfg] Start to watch config file: %s ", ConfigPath)
cmdLogger.Infof("[cfg] Start to watch config file: %s ", ConfigPath)

reloadCH := make(chan os.Signal, 1)
signal.Notify(reloadCH, syscall.SIGHUP)
Expand All @@ -256,32 +271,32 @@ func watchAndReloadConfig(ctx context.Context, relayM *sync.Map, errCh chan erro
case <-ctx.Done():
return
case <-reloadCH:
logger.Info("[cfg] Got A HUP Signal! Now Reloading Conf")
cmdLogger.Info("[cfg] Got A HUP Signal! Now Reloading Conf")
newCfg, err := loadConfig()
if err != nil {
logger.Fatalf("[cfg] Reloading Conf meet error: %s ", err)
cmdLogger.Fatalf("[cfg] Reloading Conf meet error: %s ", err)
}

var newRelayAddrList []string
for idx := range newCfg.RelayConfigs {
r, err := relay.NewRelay(&newCfg.RelayConfigs[idx])
if err != nil {
logger.Fatalf("[cfg] reload new relay failed err=%s", err.Error())
cmdLogger.Fatalf("[cfg] reload new relay failed err=%s", err.Error())
}
newRelayAddrList = append(newRelayAddrList, r.Name)

// reload old relay
if oldR, ok := relayM.Load(r.Name); ok {
oldR := oldR.(*relay.Relay)
if oldR.Name != r.Name {
logger.Infof("[cfg] close old relay name=%s", oldR.Name)
cmdLogger.Infof("[cfg] close old relay name=%s", oldR.Name)
stopOneRelay(oldR, relayM)
go startOneRelay(r, relayM, errCh)
}
continue // no need to reload
}
// start bread new relay that not in old relayM
logger.Infof("[cfg] starr new relay name=%s", r.Name)
cmdLogger.Infof("[cfg] starr new relay name=%s", r.Name)
go startOneRelay(r, relayM, errCh)
}
// closed relay not in new config
Expand All @@ -298,12 +313,37 @@ func watchAndReloadConfig(ctx context.Context, relayM *sync.Map, errCh chan erro
}
}

func initSentry() error {
if dsn := os.Getenv("SENTRY_DSN"); dsn != "" {
cmdLogger.Infof("[sentry] init sentry with dsn", dsn)
return sentry.Init(sentry.ClientOptions{Dsn: dsn})
}
return nil
}

func initCMDLogger() error {
if err := log.InitLogger(LogLevel); err != nil {
return err
}
cmdLogger = log.Logger.Named("cmd")
return nil
}

func start(ctx *cli.Context) error {

cfg, err := loadConfig()
if err != nil {
return err
}

if err := initCMDLogger(); err != nil {
return err
}

if err := initSentry(); err != nil {
return err
}

// init main ctx
mainCtx, cancel := context.WithCancel(ctx.Context)
defer cancel()
Expand All @@ -313,21 +353,21 @@ func start(ctx *cli.Context) error {

if cfg.WebPort > 0 {
go func() {
logger.Fatalf("[web] StartWebServer meet err=%s", web.StartWebServer(cfg))
cmdLogger.Fatalf("[web] StartWebServer meet err=%s", web.StartWebServer(cfg))
}()
}

if cfg.XRayConfig != nil {
go func() {
s, err := xray.StartXrayServer(mainCtx, cfg)
if err != nil {
logger.Fatalf("[xray] StartXrayServer meet err=%s", err)
cmdLogger.Fatalf("[xray] StartXrayServer meet err=%s", err)
}
defer s.Close()

if cfg.SyncTrafficEndPoint != "" {
go func() {
logger.Fatalf("[xray] StartSyncTask meet err=%s", xray.StartSyncTask(mainCtx, cfg))
cmdLogger.Fatalf("[xray] StartSyncTask meet err=%s", xray.StartSyncTask(mainCtx, cfg))
}()
}
<-ctx.Done()
Expand All @@ -336,7 +376,7 @@ func start(ctx *cli.Context) error {

if len(cfg.RelayConfigs) > 0 {
go func() {
logger.Fatalf("[relay] StartRelayServers meet err=%v", startRelayServers(mainCtx, cfg))
cmdLogger.Fatalf("[relay] StartRelayServers meet err=%v", startRelayServers(mainCtx, cfg))
}()
}

Expand All @@ -353,20 +393,16 @@ func main() {
}
}()

if dsn := os.Getenv("SENTRY_DSN"); dsn != "" {
logger.Info("[sentry] init sentry with dsn", dsn)
if err := sentry.Init(sentry.ClientOptions{Dsn: dsn}); err != nil {
logger.Fatal(err)
}
}

app := createCliAPP()
// register start command
app.Action = start
// main thread start)
if err := app.Run(os.Args); err != nil {
sentry.CurrentHub().CaptureException(err)
sentry.Flush(time.Second * 5)
logger.Fatal(err)
if cmdLogger == nil {
cmdLogger = log.InfoLogger
}
cmdLogger.Fatal(err)
}
}
7 changes: 4 additions & 3 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"time"

"github.com/Ehco1996/ehco/internal/constant"
"github.com/Ehco1996/ehco/internal/logger"
"github.com/Ehco1996/ehco/pkg/log"
"github.com/xtls/xray-core/infra/conf"
)

Expand Down Expand Up @@ -66,6 +66,7 @@ type Config struct {
WebPort int `json:"web_port,omitempty"`
WebToken string `json:"web_token,omitempty"`
EnablePing bool `json:"enable_ping,omitempty"`
LogLeveL string `json:"log_level,omitempty"`

RelayConfigs []RelayConfig `json:"relay_configs"`
XRayConfig *conf.Config `json:"xray_config,omitempty"`
Expand Down Expand Up @@ -98,7 +99,7 @@ func (c *Config) readFromFile() error {
if err != nil {
return err
}
logger.Info("[cfg] Load Config From file: ", c.PATH)
log.InfoLogger.Info("[cfg] Load Config From file: ", c.PATH)
if err != nil {
return err
}
Expand All @@ -112,7 +113,7 @@ func (c *Config) readFromHttp() error {
return err
}
defer r.Body.Close()
logger.Info("[cfg] Load Config From http:", c.PATH)
log.InfoLogger.Info("[cfg] Load Config From http:", c.PATH)
return json.NewDecoder(r.Body).Decode(&c)
}

Expand Down
4 changes: 2 additions & 2 deletions internal/lb/round_robin.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package lb

import (
"github.com/Ehco1996/ehco/internal/logger"
"github.com/Ehco1996/ehco/pkg/log"
"go.uber.org/atomic"
)

Expand All @@ -15,7 +15,7 @@ type Node struct {
func (n *Node) BlockForSomeTime() {
// TODO: make this configurable
n.BlockTimes.Add(1000)
logger.Infof("[lb] block remote node for 1000 times label=%s remote=%s", n.Label, n.Address)
log.InfoLogger.Info("[lb] block remote node for 1000 times label=%s remote=%s", n.Label, n.Address)
}

// RoundRobin is an interface for representing round-robin balancing.
Expand Down
48 changes: 0 additions & 48 deletions internal/logger/logger.go

This file was deleted.

Loading

0 comments on commit 2d02908

Please sign in to comment.