Skip to content

简介

日志模块,基于 zap + lumberjack 实现结构化日志输出。支持 JSON 和 Console 格式,自动日志文件轮转(按大小和天数),同时输出到文件和终端。提供两个全局日志实例:Logger(业务日志)和 CoreLogger(框架核心日志)。默认日志目录为当前工作目录,可通过 SetLogDir() 动态修改。

导入

go
import "github.com/wallace5303/ee-go/elog"

全局变量

Logger

*zap.SugaredLogger — 业务日志实例,由 InitLog() 初始化。用于在业务代码中记录日志。

go
elog.Logger.Info("hello")
elog.Logger.Infof("user id: %d", userId)
elog.Logger.Warn("警告消息")
elog.Logger.Errorf("错误: %s", err)

CoreLogger

*zap.SugaredLogger — 框架核心日志实例,由 InitCoreLog() 初始化。用于记录 ee-go 框架内部日志。

go
elog.CoreLogger.Infof("[ee-go] load http service")
elog.CoreLogger.Errorf("[ee-go] The port:%s already in use", port)

LogDir

string — 日志文件存储目录,默认为当前工作目录(os.Getwd()),通过 SetLogDir() 修改。

LogName

string — 默认日志文件名,值为 "ee-go.log"

结构体

LogConfig

日志配置结构体,用于生成 zap Logger 时的参数。

字段类型说明
OutputJSONbool输出格式:true 为 JSON 格式,false 为 Console 格式(默认)
Levelstring最低日志级别,例如 "debug""info""warn""error"(默认 "info"
FileNamestring日志文件绝对路径,默认为 {LogDir}/ee-go.log
MaxSizeint单个日志文件最大大小(MB),超过后自动轮转,默认 1024
MaxAgeint旧日志文件最大保留天数,默认 30

API

InitLog(cfg)

说明:初始化业务日志实例 Logger。根据配置创建 zap Logger 并转换为 SugaredLogger,写入全局 Logger 变量。

参数

参数类型必填说明
cfgmap[string]any日志配置,支持字段:output_json(bool)、level(string)、filename(string)、max_size(float64→int)、max_age(float64→int)

返回值:无

示例

go
logCfg := econfig.GetLogger()
elog.InitLog(logCfg)

// 使用业务日志
elog.Logger.Info("应用已启动")
elog.Logger.Infof("请求: method=%s, path=%s", method, path)

参见:econfig.GetLogger()

InitCoreLog(cfg)

说明:初始化框架核心日志实例 CoreLogger。逻辑与 InitLog() 相同,创建独立的 SugaredLogger 并写入全局 CoreLogger 变量,用于记录 ee-go 框架内部日志。

参数

参数类型必填说明
cfgmap[string]any核心日志配置,字段与 InitLog() 相同

返回值:无

示例

go
coreLogCfg := econfig.GetCoreLogger()
elog.InitCoreLog(coreLogCfg)

// 使用核心日志
elog.CoreLogger.Infof("[ee-go] http server %s, pid:%d", url, pid)

参见:econfig.GetCoreLogger()

GetZLog(cfg)

说明:根据配置创建并返回 *zap.Logger 实例。这是日志初始化的核心函数,InitLog()InitCoreLog() 内部都调用此函数。合并默认配置与传入配置,生成 zap Core(编码器 + 写入器 + 级别过滤器),返回带调用者信息的 zap Logger。

参数

参数类型必填说明
cfgmap[string]any日志配置,字段与 InitLog() 相同;传入空 map 时使用默认值

返回值*zap.Logger — zap Logger 实例,可进一步调用 .Sugar() 获取 SugaredLogger

示例

go
cfg := map[string]any{
    "output_json": false,
    "level":       "info",
    "filename":    "app.log",
    "max_size":    512,
    "max_age":     7,
}
zlog := elog.GetZLog(cfg)
logger := zlog.Sugar()
logger.Info("自定义日志消息")

SetLogDir(path)

说明:设置日志文件存储目录。修改全局 LogDir 变量,影响后续 GetZLog() 调用中日志文件绝对路径的构建。通常在初始化阶段由 eboot 调用,将日志目录指向 {WorkDir}/logs

参数

参数类型必填说明
pathstring日志目录绝对路径

返回值:无

示例

go
logDir := filepath.Join(eruntime.WorkDir, "logs")
elog.SetLogDir(logDir)

参见:eruntime.WorkDir

SugaredLogger 方法

LoggerCoreLogger 都是 *zap.SugaredLogger,支持以下常用方法:

方法说明
Info(args ...any)INFO 级别日志
Infof(template string, args ...any)INFO 级别格式化日志
Warn(args ...any)WARN 级别日志
Warnf(template string, args ...any)WARN 级别格式化日志
Error(args ...any)ERROR 级别日志
Errorf(template string, args ...any)ERROR 级别格式化日志
DPanic(args ...any)DPANIC 级别日志(开发环境下触发 panic)
DPanicf(template string, args ...any)DPANIC 级别格式化日志
Panic(args ...any)PANIC 级别日志并触发 panic
Panicf(template string, args ...any)PANIC 级别格式化日志并触发 panic
Fatal(args ...any)FATAL 级别日志并终止进程
Fatalf(template string, args ...any)FATAL 级别格式化日志并终止进程