mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 14:22:26 +08:00
修改日志模块
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user