u
This commit is contained in:
1 parent
11bf4e1e76
commit
2d036f4d95
7 files changed
+98
-13
No files matched your search
@@ -4,7 +4,7 @@ import (
|
||||
"base-framework/internal/app"
|
||||
"base-framework/pkg/config"
|
||||
"base-framework/pkg/logx"
|
||||
"base-framework/pkg/utils/snowflake"
|
||||
"base-framework/pkg/utils/uid"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
@@ -23,7 +23,7 @@ func main() {
|
||||
}
|
||||
// 初始化日志
|
||||
logx.InitLogger()
|
||||
logx.Logger.Info("项目启动成功...", logx.Uint64("id", snowflake.NextID()))
|
||||
logx.Logger.Info("项目启动成功...", logx.Uint64("id", uid.NextID()))
|
||||
logx.Logger.Info("项目启动成功2...")
|
||||
|
||||
logx.Logger.Error("测试错误")
|
||||
|
||||
@@ -8,7 +8,7 @@ jwt:
|
||||
log:
|
||||
dir: "logs" # 日志根目录
|
||||
level: "debug" # 全局最低日志级别
|
||||
format: "console" # 输出格式,可选 json 或 console
|
||||
format: "json" # 输出格式,可选 json 或 console
|
||||
daily: true # 是否按天滚动
|
||||
maxDays: 30 # 保留天数,0表示无限
|
||||
caller: true # 是否记录调用文件行号
|
||||
|
||||
@@ -38,3 +38,18 @@ ERROR app/main.go:29 测试错误...
|
||||
2025-08-15 17:30:34.451 ERROR 6412 --- app/main.go:29 测试错误
|
||||
2025-08-15 17:30:45.526 ERROR 216 --- app/main.go:29 测试错误
|
||||
2025-08-15 17:30:58.865 ERROR 14788 --- app/main.go:29 测试错误
|
||||
2025-08-15 20:20:43.212 ERROR 36240 --- app/main.go:29 测试错误
|
||||
2025-08-15 20:22:59.824 ERROR 20504 --- app/main.go:29 测试错误
|
||||
2025-08-15 20:23:20.618 ERROR 26140 --- app/main.go:29 测试错误
|
||||
2025-08-15 20:23:40 ERROR 10016 --- app/main.go:29 测试错误
|
||||
2025-08-15 20:27:44.044 ERROR 29060 --- app/main.go:29: 测试错误
|
||||
2025-08-15 20:30:58.422 ERROR ...- app/main.go:29: 测试错误
|
||||
2025-08-15 20:31:14.222 ERROR 15492 --- app/main.go:29: 测试错误
|
||||
2025-08-15 20:31:31.003 ERROR 34092 --- app/main.go:29 测试错误
|
||||
2025-08-15 20:31:48.042 ERROR 24436 --- app/main.go:29 测试错误
|
||||
2025-08-15 20:32:05.156 ERROR 36992---app/main.go:29 测试错误
|
||||
2025-08-15 20:32:13.911 ERROR 860 - app/main.go:29 测试错误
|
||||
2025-08-15 20:32:32.059 ERROR [16248] - app/main.go:29 测试错误
|
||||
2025-08-15 20:32:41.937 ERROR [12140] app/main.go:29 测试错误
|
||||
2025-08-15 22:25:29.409 ERROR [23208] app/main.go:29 测试错误 {"log_id": 347022995107086338}
|
||||
2025-08-15 22:25:47.684 ERROR [23380] app/main.go:29 测试错误 {"log_id": 347023071757991941}
|
||||
@@ -78,3 +78,35 @@ INFO app/main.go:27 项目启动成功2...
|
||||
2025-08-15 17:30:45.526 INFO 216 --- app/main.go:27 项目启动成功2...
|
||||
2025-08-15 17:30:58.865 INFO 14788 --- app/main.go:26 项目启动成功... {"id": 346948879473704960}
|
||||
2025-08-15 17:30:58.865 INFO 14788 --- app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:20:43.212 INFO 36240 --- app/main.go:26 项目启动成功... {"id": 346991595721064448}
|
||||
2025-08-15 20:20:43.212 INFO 36240 --- app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:22:59.824 INFO 20504 --- app/main.go:26 项目启动成功... {"id": 346992168713322496}
|
||||
2025-08-15 20:22:59.824 INFO 20504 --- app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:23:20.618 INFO 26140 --- app/main.go:26 项目启动成功... {"id": 346992255929679872}
|
||||
2025-08-15 20:23:20.618 INFO 26140 --- app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:23:40 INFO 10016 --- app/main.go:26 项目启动成功... {"id": 346992341233434624}
|
||||
2025-08-15 20:23:40 INFO 10016 --- app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:27:44.044 INFO 29060 --- app/main.go:26: 项目启动成功... {"id": 346993360818405376}
|
||||
2025-08-15 20:27:44.044 INFO 29060 --- app/main.go:27: 项目启动成功2...
|
||||
2025-08-15 20:30:58.422 INFO ...- app/main.go:26: 项目启动成功... {"id": 346994176098828288}
|
||||
2025-08-15 20:30:58.422 INFO ...- app/main.go:27: 项目启动成功2...
|
||||
2025-08-15 20:31:14.222 INFO 15492 --- app/main.go:26: 项目启动成功... {"id": 346994242368831488}
|
||||
2025-08-15 20:31:14.222 INFO 15492 --- app/main.go:27: 项目启动成功2...
|
||||
2025-08-15 20:31:31.003 INFO 34092 --- app/main.go:26 项目启动成功... {"id": 346994312753446912}
|
||||
2025-08-15 20:31:31.003 INFO 34092 --- app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:31:48.042 INFO 24436 --- app/main.go:26 项目启动成功... {"id": 346994384220192768}
|
||||
2025-08-15 20:31:48.042 INFO 24436 --- app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:32:05.156 INFO 36992---app/main.go:26 项目启动成功... {"id": 346994456001511424}
|
||||
2025-08-15 20:32:05.156 INFO 36992---app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:32:13.911 INFO 860 - app/main.go:26 项目启动成功... {"id": 346994492722642944}
|
||||
2025-08-15 20:32:13.911 INFO 860 - app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:32:32.059 INFO [16248] - app/main.go:26 项目启动成功... {"id": 346994568840871936}
|
||||
2025-08-15 20:32:32.059 INFO [16248] - app/main.go:27 项目启动成功2...
|
||||
2025-08-15 20:32:41.937 INFO [12140] app/main.go:26 项目启动成功... {"id": 346994610272206848}
|
||||
2025-08-15 20:32:41.937 INFO [12140] app/main.go:27 项目启动成功2...
|
||||
2025-08-15 22:25:29.408 INFO [23208] app/main.go:26 项目启动成功... {"id": 347022995102892032}
|
||||
2025-08-15 22:25:29.409 INFO [23208] app/main.go:27 项目启动成功2... {"log_id": 347022995107086336}
|
||||
2025-08-15 22:25:47.684 INFO [23380] app/main.go:26 项目启动成功... {"id": 347023071757991936, "log_id": 347023071757991937}
|
||||
2025-08-15 22:25:47.684 INFO [23380] app/main.go:27 项目启动成功2... {"log_id": 347023071757991939}
|
||||
{"level":"INFO","ts":"2025-08-15 22:26:12.846","caller":"app/main.go:26","msg":"项目启动成功...","id":347023177295069184,"log_id":347023177295069185}
|
||||
{"level":"INFO","ts":"2025-08-15 22:26:12.846","caller":"app/main.go:27","msg":"项目启动成功2...","log_id":347023177295069187}
|
||||
@@ -1,6 +1,7 @@
|
||||
package logx
|
||||
|
||||
import (
|
||||
"base-framework/pkg/utils/uid"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -14,6 +15,7 @@ import (
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
// ----------------- 全局变量 -----------------
|
||||
var (
|
||||
Logger *zap.Logger
|
||||
|
||||
@@ -30,6 +32,7 @@ var (
|
||||
errorCore zapcore.Core
|
||||
)
|
||||
|
||||
const LogID = "log_id"
|
||||
const logTmFmtWithMS = "2006-01-02 15:04:05.000"
|
||||
|
||||
// 彩色日志级别
|
||||
@@ -43,7 +46,38 @@ var levelColor = map[zapcore.Level]string{
|
||||
zapcore.FatalLevel: "\033[35mFATAL\033[0m",
|
||||
}
|
||||
|
||||
// defaultLogConfig 返回默认日志配置
|
||||
// ----------------- trackCore -----------------
|
||||
// trackCore 包装 zapcore.Core,实现自动生成 track_id
|
||||
type trackCore struct {
|
||||
zapcore.Core
|
||||
}
|
||||
|
||||
func (c *trackCore) With(fields []zapcore.Field) zapcore.Core {
|
||||
return &trackCore{Core: c.Core.With(fields)}
|
||||
}
|
||||
|
||||
func (c *trackCore) Check(entry zapcore.Entry, ce *zapcore.CheckedEntry) *zapcore.CheckedEntry {
|
||||
if c.Enabled(entry.Level) {
|
||||
return ce.AddCore(entry, c)
|
||||
}
|
||||
return ce
|
||||
}
|
||||
|
||||
func (c *trackCore) Write(entry zapcore.Entry, fields []zapcore.Field) error {
|
||||
hasTrackID := false
|
||||
for _, f := range fields {
|
||||
if f.Key == LogID {
|
||||
hasTrackID = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !hasTrackID {
|
||||
fields = append(fields, Uint64(LogID, uid.NextID()))
|
||||
}
|
||||
return c.Core.Write(entry, fields)
|
||||
}
|
||||
|
||||
// ----------------- 默认日志配置 -----------------
|
||||
func defaultLogConfig() *types.Log {
|
||||
return &types.Log{
|
||||
Dir: "logs",
|
||||
@@ -57,7 +91,7 @@ func defaultLogConfig() *types.Log {
|
||||
}
|
||||
}
|
||||
|
||||
// InitLogger 初始化全局 Logger
|
||||
// ----------------- 初始化 -----------------
|
||||
func InitLogger() {
|
||||
once.Do(func() {
|
||||
if config.Log == nil {
|
||||
@@ -68,7 +102,6 @@ func InitLogger() {
|
||||
})
|
||||
}
|
||||
|
||||
// 切换日志文件
|
||||
func switchDate(today string) {
|
||||
currentDate = today
|
||||
|
||||
@@ -120,14 +153,18 @@ func switchDate(today string) {
|
||||
return lvl >= zapcore.ErrorLevel
|
||||
}))
|
||||
|
||||
cores := []zapcore.Core{infoCore, warnCore, errorCore}
|
||||
cores := []zapcore.Core{
|
||||
&trackCore{infoCore},
|
||||
&trackCore{warnCore},
|
||||
&trackCore{errorCore},
|
||||
}
|
||||
|
||||
// 开启本地console输出
|
||||
// 开启 console 输出
|
||||
if config.Log.Console {
|
||||
consoleCore := zapcore.NewCore(newConsoleEncoder(true), zapcore.AddSync(os.Stdout), zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
|
||||
return lvl >= zapcore.DebugLevel
|
||||
}))
|
||||
cores = append(cores, consoleCore)
|
||||
cores = append(cores, &trackCore{consoleCore})
|
||||
}
|
||||
|
||||
Logger = zap.New(zapcore.NewTee(cores...))
|
||||
@@ -145,6 +182,7 @@ func switchDate(today string) {
|
||||
}))
|
||||
}
|
||||
|
||||
// ----------------- 编码器 -----------------
|
||||
func newConsoleEncoder(enableColor bool) zapcore.Encoder {
|
||||
cfg := zapcore.EncoderConfig{
|
||||
TimeKey: "ts",
|
||||
@@ -166,13 +204,11 @@ func newConsoleEncoder(enableColor bool) zapcore.Encoder {
|
||||
enc.AppendString(lvl.CapitalString())
|
||||
}
|
||||
},
|
||||
//ConsoleSeparator: "",
|
||||
EncodeCaller: func(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
|
||||
pid := os.Getpid()
|
||||
enc.AppendString(fmt.Sprintf("%d --- %s", pid, caller.TrimmedPath()))
|
||||
enc.AppendString(fmt.Sprintf("[%d] %s", pid, caller.TrimmedPath()))
|
||||
},
|
||||
}
|
||||
|
||||
return zapcore.NewConsoleEncoder(cfg)
|
||||
}
|
||||
|
||||
@@ -187,6 +223,7 @@ func newJSONEncoder() zapcore.Encoder {
|
||||
return zapcore.NewJSONEncoder(cfg)
|
||||
}
|
||||
|
||||
// ----------------- 工具函数 -----------------
|
||||
func checkDateSwitch() {
|
||||
today := time.Now().Format("2006-01-02")
|
||||
if today != currentDate {
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
)
|
||||
|
||||
type ErrorInfo struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
Method string `json:"method,omitempty"`
|
||||
Path string `json:"path,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package snowflake
|
||||
package uid
|
||||
|
||||
import (
|
||||
"base-framework/pkg/config"
|
||||
Reference in new issue
Block a user