修改日志模块

This commit is contained in:
huangxiaolei
2022-12-13 16:52:06 +08:00
parent 9dc864ff69
commit 662b058327
19 changed files with 134 additions and 82 deletions

5
.gitignore vendored
View File

@@ -18,8 +18,11 @@
.idea
*.iml
# Binaries file
# Output binaries file dir
bin
# Game protocol protobuf generate file
protocol/proto/*.pb.go
# Log file
*.log

View File

@@ -6,8 +6,9 @@ kcp_port = 22103
[logger]
level = "DEBUG"
method = "CONSOLE"
track_line = true
mode = "BOTH"
track = true
max_size = 10485760
[database]
url = "mongodb://mongo:27017"

View File

@@ -4,8 +4,9 @@ kcp_port = 22103
[logger]
level = "DEBUG"
method = "CONSOLE"
track_line = true
mode = "BOTH"
track = true
max_size = 10485760
[mq]
nats_url = "nats://nats:4222"

View File

@@ -2,8 +2,9 @@ http_port = 9001
[logger]
level = "DEBUG"
method = "CONSOLE"
track_line = true
mode = "BOTH"
track = true
max_size = 10485760
[database]
url = "mongodb://mongo:27017"

View File

@@ -5,8 +5,9 @@ gacha_history_server = "https://hk4e.flswld.com/api/v1"
[logger]
level = "DEBUG"
method = "CONSOLE"
track_line = true
mode = "BOTH"
track = true
max_size = 10485760
[database]
url = "mongodb://mongo:27017"

View File

@@ -3,37 +3,43 @@ package config
import (
"fmt"
"hk4e/pkg/logger"
"github.com/BurntSushi/toml"
)
var CONF *Config = nil
// 配置
// Config 配置
type Config struct {
HttpPort int `toml:"http_port"`
Logger logger.Config `toml:"logger"`
Database Database `toml:"database"`
Hk4e Hk4e `toml:"hk4e"`
MQ MQ `toml:"mq"`
HttpPort int32 `toml:"http_port"`
Logger Logger `toml:"logger"`
Database Database `toml:"database"`
Hk4e Hk4e `toml:"hk4e"`
MQ MQ `toml:"mq"`
}
// 数据库配置
// Logger 日志
type Logger struct {
Level string `toml:"level"`
Mode string `toml:"mode"`
Track bool `toml:"track"`
MaxSize int32 `toml:"max_size"`
}
// Database 数据库配置
type Database struct {
Url string `toml:"url"`
}
// 原神相关
// Hk4e 原神相关
type Hk4e struct {
KcpPort int `toml:"kcp_port"`
KcpPort int32 `toml:"kcp_port"`
KcpAddr string `toml:"kcp_addr"`
ResourcePath string `toml:"resource_path"`
GameDataConfigPath string `toml:"game_data_config_path"`
GachaHistoryServer string `toml:"gacha_history_server"`
}
// 消息队列
// MQ 消息队列
type MQ struct {
NatsUrl string `toml:"nats_url"`
}

View File

@@ -33,7 +33,7 @@ func LoadRsaKey() (signRsaKey []byte, encRsaKeyMap map[string][]byte, pwdRsaKey
return signRsaKey, encRsaKeyMap, pwdRsaKey
}
func InitRegion(kcpAddr string, kcpPort int) (*proto.QueryCurrRegionHttpRsp, *proto.QueryRegionListHttpRsp, *random.Ec2b) {
func InitRegion(kcpAddr string, kcpPort int32) (*proto.QueryCurrRegionHttpRsp, *proto.QueryRegionListHttpRsp, *random.Ec2b) {
dispatchEc2b := random.NewEc2b()
dispatchEc2bData := dispatchEc2b.Bytes()
dispatchXorKey := dispatchEc2b.XorKey()

View File

@@ -17,7 +17,7 @@ import (
func Run(ctx context.Context, configFile string) error {
config.InitConfig(configFile)
logger.InitLogger("dispatch", config.CONF.Logger)
logger.InitLogger("dispatch")
logger.LOG.Info("dispatch start")
db := dao.NewDao()

View File

@@ -162,7 +162,7 @@ func (c *Controller) registerRouter() {
engine.Use(c.authorize())
engine.POST("/gate/token/verify", c.gateTokenVerify)
port := config.CONF.HttpPort
addr := ":" + strconv.Itoa(port)
addr := ":" + strconv.Itoa(int(port))
err := engine.Run(addr)
if err != nil {
logger.LOG.Error("gin run error: %v", err)

View File

@@ -19,7 +19,7 @@ import (
func Run(ctx context.Context, configFile string) error {
config.InitConfig(configFile)
logger.InitLogger("gate", config.CONF.Logger)
logger.InitLogger("gate")
logger.LOG.Info("gate start")
kcpEventInput := make(chan *net.KcpEvent)

View File

@@ -61,8 +61,8 @@ func (k *KcpConnectManager) Start() {
// key
k.dispatchKey = make([]byte, 4096)
// kcp
port := strconv.FormatInt(int64(config.CONF.Hk4e.KcpPort), 10)
listener, err := kcp.ListenWithOptions("0.0.0.0:"+port, nil, 0, 0)
port := strconv.Itoa(int(config.CONF.Hk4e.KcpPort))
listener, err := kcp.ListenWithOptions(config.CONF.Hk4e.KcpAddr+":"+port, nil, 0, 0)
if err != nil {
logger.LOG.Error("listen kcp err: %v", err)
return

View File

@@ -40,7 +40,7 @@ func CheckJsonLoop(path string, errorJsonFileList *[]string, totalJsonFileCount
func TestCheckJsonValid(t *testing.T) {
config.InitConfig("./application.toml")
logger.InitLogger("test", config.CONF.Logger)
logger.InitLogger("test")
errorJsonFileList := make([]string, 0)
totalJsonFileCount := 0
CheckJsonLoop("./game_data_config/json", &errorJsonFileList, &totalJsonFileCount)

View File

@@ -9,7 +9,7 @@ import (
func TestInitGameDataConfig(t *testing.T) {
config.InitConfig("./application.toml")
logger.InitLogger("test", config.CONF.Logger)
logger.InitLogger("test")
logger.LOG.Info("start load conf")
InitGameDataConfig()
logger.LOG.Info("load conf finish, conf: %v", CONF)

View File

@@ -18,7 +18,7 @@ import (
func Run(ctx context.Context, configFile string) error {
config.InitConfig(configFile)
logger.InitLogger("gm", config.CONF.Logger)
logger.InitLogger("gm")
logger.LOG.Info("gm start")
conn, err := nats.Connect(config.CONF.MQ.NatsUrl)

View File

@@ -48,7 +48,7 @@ func (c *Controller) registerRouter() {
engine.Use(c.authorize())
engine.POST("/gm/cmd", c.gmCmd)
port := config.CONF.HttpPort
addr := ":" + strconv.Itoa(port)
addr := ":" + strconv.Itoa(int(port))
err := engine.Run(addr)
if err != nil {
logger.LOG.Error("gin run error: %v", err)

View File

@@ -25,7 +25,7 @@ import (
func Run(ctx context.Context, configFile string) error {
config.InitConfig(configFile)
logger.InitLogger("gs", config.CONF.Logger)
logger.InitLogger("gs")
logger.LOG.Info("gs start")
constant.InitConstant()

View File

@@ -10,7 +10,7 @@ import (
func TestAoiManagerGetSurrGridListByGid(t *testing.T) {
filePath := "./application.toml"
config.InitConfig(filePath)
logger.InitLogger("", config.CONF.Logger)
logger.InitLogger("")
aoiManager := NewAoiManager(
-150, 150, 3,
-150, 150, 3,

View File

@@ -73,7 +73,7 @@ func (g *GameManager) Stop() {
LOCAL_EVENT_MANAGER.localEventChan <- &LocalEvent{
EventId: RunUserCopyAndSave,
}
time.Sleep(time.Second * 5)
time.Sleep(time.Second * 3)
//g.worldManager.worldStatic.SaveTerrain()
}

View File

@@ -3,6 +3,7 @@ package logger
import (
"bytes"
"fmt"
"hk4e/common/config"
"log"
"os"
"path"
@@ -13,31 +14,39 @@ import (
)
const (
DEBUG int = 1
INFO int = 2
ERROR int = 3
UNKNOWN int = 4
DEBUG = iota
INFO
ERROR
UNKNOWN
)
const (
CONSOLE int = 1
FILE int = 2
BOTH int = 3
NEITHER int = 4
CONSOLE = iota
FILE
BOTH
NEITHER
)
type Config struct {
Level string `toml:"level"`
Method string `toml:"method"`
TrackLine bool `toml:"track_line"`
}
var (
GREEN = string([]byte{27, 91, 51, 50, 109})
WHITE = string([]byte{27, 91, 51, 55, 109})
YELLOW = string([]byte{27, 91, 51, 51, 109})
RED = string([]byte{27, 91, 51, 49, 109})
BLUE = string([]byte{27, 91, 51, 52, 109})
MAGENTA = string([]byte{27, 91, 51, 53, 109})
CYAN = string([]byte{27, 91, 51, 54, 109})
RESET = string([]byte{27, 91, 48, 109})
ALL_COLOR = []string{GREEN, WHITE, YELLOW, RED, BLUE, MAGENTA, CYAN, RESET}
)
var LOG *Logger = nil
type Logger struct {
AppName string
Level int
Method int
TrackLine bool
Mode int
Track bool
MaxSize int32
File *os.File
LogInfoChan chan *LogInfo
}
@@ -53,33 +62,19 @@ type LogInfo struct {
Stack string
}
func InitLogger(name string, cfg Config) {
func InitLogger(appName string) {
log.SetFlags(0)
LOG = new(Logger)
LOG.Level = getLevelInt(cfg.Level)
LOG.Method = getMethodInt(cfg.Method)
LOG.TrackLine = cfg.TrackLine
LOG.AppName = appName
LOG.Level = getLevelInt(config.CONF.Logger.Level)
LOG.Mode = getModeInt(config.CONF.Logger.Mode)
LOG.Track = config.CONF.Logger.Track
LOG.MaxSize = config.CONF.Logger.MaxSize
LOG.LogInfoChan = make(chan *LogInfo, 1000)
if LOG.Method == FILE || LOG.Method == BOTH {
file, err := os.OpenFile("./"+name+".log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
info := fmt.Sprintf("open log file error: %v\n", err)
panic(info)
}
LOG.File = file
}
LOG.File = nil
go LOG.doLog()
}
var GREEN = string([]byte{27, 91, 51, 50, 109})
var WHITE = string([]byte{27, 91, 51, 55, 109})
var YELLOW = string([]byte{27, 91, 51, 51, 109})
var RED = string([]byte{27, 91, 51, 49, 109})
var BLUE = string([]byte{27, 91, 51, 52, 109})
var MAGENTA = string([]byte{27, 91, 51, 53, 109})
var CYAN = string([]byte{27, 91, 51, 54, 109})
var RESET = string([]byte{27, 91, 48, 109})
func (l *Logger) doLog() {
for {
logInfo := <-l.LogInfoChan
@@ -93,7 +88,7 @@ func (l *Logger) doLog() {
} else if logInfo.Level == ERROR {
logHeader += RED + "[" + l.getLevelStr(logInfo.Level) + "]" + RESET + " "
}
if l.TrackLine {
if l.Track {
logHeader += MAGENTA + "[" +
logInfo.FileName + ":" + strconv.Itoa(logInfo.Line) + " " +
logInfo.FuncName + "()" + " " +
@@ -109,17 +104,61 @@ func (l *Logger) doLog() {
if logInfo.Stack != "" {
logStr += logInfo.Stack
}
if l.Method == CONSOLE {
if l.Mode == CONSOLE {
log.Print(logStr)
} else if l.Method == FILE {
_, _ = l.File.WriteString(logStr)
} else if l.Method == BOTH {
} else if l.Mode == FILE {
l.WriteLogFile(logStr)
} else if l.Mode == BOTH {
log.Print(logStr)
_, _ = l.File.WriteString(logStr)
l.WriteLogFile(logStr)
}
}
}
func (l *Logger) WriteLogFile(logStr string) {
for _, v := range ALL_COLOR {
logStr = strings.ReplaceAll(logStr, v, "")
}
if l.File == nil {
file, err := os.OpenFile("./"+l.AppName+".log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Printf(RED+"open new log file error: %v\n"+RESET, err)
return
}
LOG.File = file
}
fileStat, err := l.File.Stat()
if err != nil {
fmt.Printf(RED+"get log file stat error: %v\n"+RESET, err)
return
}
if fileStat.Size() >= int64(l.MaxSize) {
err = l.File.Close()
if err != nil {
fmt.Printf(RED+"close old log file error: %v\n"+RESET, err)
return
}
timeNow := time.Now()
timeNowStr := timeNow.Format("2006-01-02-15_04_05")
err = os.Rename(l.File.Name(), l.File.Name()+"."+timeNowStr+".log")
if err != nil {
fmt.Printf(RED+"rename old log file error: %v\n"+RESET, err)
return
}
file, err := os.OpenFile("./"+l.AppName+".log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Printf(RED+"open new log file error: %v\n"+RESET, err)
return
}
LOG.File = file
}
_, err = l.File.WriteString(logStr)
if err != nil {
fmt.Printf(RED+"write log file error: %v\n"+RESET, err)
return
}
}
func (l *Logger) Debug(msg string, param ...any) {
if l.Level > DEBUG {
return
@@ -128,7 +167,7 @@ func (l *Logger) Debug(msg string, param ...any) {
logInfo.Level = DEBUG
logInfo.Msg = msg
logInfo.Param = param
if l.TrackLine {
if l.Track {
logInfo.FileName, logInfo.Line, logInfo.FuncName = l.getLineFunc()
logInfo.GoroutineId = l.getGoroutineId()
}
@@ -143,7 +182,7 @@ func (l *Logger) Info(msg string, param ...any) {
logInfo.Level = INFO
logInfo.Msg = msg
logInfo.Param = param
if l.TrackLine {
if l.Track {
logInfo.FileName, logInfo.Line, logInfo.FuncName = l.getLineFunc()
logInfo.GoroutineId = l.getGoroutineId()
}
@@ -158,7 +197,7 @@ func (l *Logger) Error(msg string, param ...any) {
logInfo.Level = ERROR
logInfo.Msg = msg
logInfo.Param = param
if l.TrackLine {
if l.Track {
logInfo.FileName, logInfo.Line, logInfo.FuncName = l.getLineFunc()
logInfo.GoroutineId = l.getGoroutineId()
}
@@ -173,7 +212,7 @@ func (l *Logger) ErrorStack(msg string, param ...any) {
logInfo.Level = ERROR
logInfo.Msg = msg
logInfo.Param = param
if l.TrackLine {
if l.Track {
logInfo.FileName, logInfo.Line, logInfo.FuncName = l.getLineFunc()
logInfo.GoroutineId = l.getGoroutineId()
logInfo.Stack = l.Stack()
@@ -207,8 +246,8 @@ func (l *Logger) getLevelStr(level int) (ret string) {
return ret
}
func getMethodInt(method string) (ret int) {
switch method {
func getModeInt(mode string) (ret int) {
switch mode {
case "CONSOLE":
ret = CONSOLE
case "FILE":