简介
日志模块,基于 zap + lumberjack 实现结构化日志输出。支持 JSON 和 Console 格式,自动日志文件轮转(按大小和天数),同时输出到文件和终端。提供两个全局日志实例:Logger(业务日志)和 CoreLogger(框架核心日志)。默认日志目录为当前工作目录,可通过 SetLogDir() 动态修改。
导入
import "github.com/wallace5303/ee-go/elog"全局变量
Logger
*zap.SugaredLogger — 业务日志实例,由 InitLog() 初始化。用于在业务代码中记录日志。
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 框架内部日志。
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 时的参数。
| 字段 | 类型 | 说明 |
|---|---|---|
| OutputJSON | bool | 输出格式:true 为 JSON 格式,false 为 Console 格式(默认) |
| Level | string | 最低日志级别,例如 "debug"、"info"、"warn"、"error"(默认 "info") |
| FileName | string | 日志文件绝对路径,默认为 {LogDir}/ee-go.log |
| MaxSize | int | 单个日志文件最大大小(MB),超过后自动轮转,默认 1024 |
| MaxAge | int | 旧日志文件最大保留天数,默认 30 |
API
InitLog(cfg)
说明:初始化业务日志实例 Logger。根据配置创建 zap Logger 并转换为 SugaredLogger,写入全局 Logger 变量。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cfg | map[string]any | 是 | 日志配置,支持字段:output_json(bool)、level(string)、filename(string)、max_size(float64→int)、max_age(float64→int) |
返回值:无
示例:
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 框架内部日志。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cfg | map[string]any | 是 | 核心日志配置,字段与 InitLog() 相同 |
返回值:无
示例:
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。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cfg | map[string]any | 是 | 日志配置,字段与 InitLog() 相同;传入空 map 时使用默认值 |
返回值:*zap.Logger — zap Logger 实例,可进一步调用 .Sugar() 获取 SugaredLogger
示例:
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。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | 日志目录绝对路径 |
返回值:无
示例:
logDir := filepath.Join(eruntime.WorkDir, "logs")
elog.SetLogDir(logDir)参见:eruntime.WorkDir
SugaredLogger 方法
Logger 和 CoreLogger 都是 *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 级别格式化日志并终止进程 |
