daShangDao_kfzgw-info/md/logger.md
2026-02-27 11:46:40 +08:00

7.9 KiB
Raw Blame History

logger.dll 使用教程

1. 创建DLL工具实例

加载DLL文件

// LoggerDLL 日志工具DLL结构
type loggerDLL struct {
	dll                     *syscall.DLL
	createLogger           *syscall.Proc // 创建日志器
	createContextWithTaskType *syscall.Proc // 创建带任务类型的上下文
	logInfo                *syscall.Proc // 记录信息日志
	logError               *syscall.Proc // 记录错误日志
	logWarning             *syscall.Proc // 记录警告日志
	logSuccess             *syscall.Proc // 记录成功日志
	getLogs                *syscall.Proc // 获取日志条目
	getLogFiles            *syscall.Proc // 获取日志文件列表
	getVersion             *syscall.Proc // 获取版本信息
	closeAllLoggers        *syscall.Proc // 关闭所有日志器
	freeString             *syscall.Proc // 释放C字符串
}

// 初始化loggerDLL
func InitLoggerDLL() (*loggerDLL, error) {
	dllPath := filepath.Join("dll", "logger.dll")
	if _, err := os.Stat(dllPath); os.IsNotExist(err) {
		return nil, fmt.Errorf("logger DLL 不存在: %s", dllPath)
	}
	if dll, err := syscall.LoadDLL(dllPath); err != nil {
		return nil, fmt.Errorf("加载logger DLL 失败: %s", err)
	} else {
		return &loggerDLL{
			dll:                     dll,
			createLogger:           dll.MustFindProc("CreateLogger"),
			createContextWithTaskType: dll.MustFindProc("CreateContextWithTaskType"),
			logInfo:                dll.MustFindProc("LogInfo"),
			logError:               dll.MustFindProc("LogError"),
			logWarning:             dll.MustFindProc("LogWarning"),
			logSuccess:             dll.MustFindProc("LogSuccess"),
			getLogs:                dll.MustFindProc("GetLogs"),
			getLogFiles:            dll.MustFindProc("GetLogFiles"),
			getVersion:             dll.MustFindProc("GetVersion"),
			closeAllLoggers:        dll.MustFindProc("CloseAllLoggers"),
			freeString:             dll.MustFindProc("FreeString"),
		}, nil
	}
}

dll, err := InitLoggerDLL()

获取C字符串

// cStr 获取C字符串
func (m *loggerDLL) cStr(p uintptr) string {
	if p == 0 {
		return ""
	}
	b := []byte{}
	for i := uintptr(0); ; i++ {
		c := *(*byte)(unsafe.Pointer(p + i))
		if c == 0 {
			break
		}
		b = append(b, c)
	}
	s := string(b)
	if m.freeString != nil {
		m.freeString.Call(p)
	}
	return s
}

接口详情

创建日志器--CreateLogger

请求信息

dll.CreateLogger(configJSON)

请求参数

参数名 类型 必填 说明
configJSON string 配置信息JSON字符串

配置JSON结构

{
  "log_dir": "/path/to/logs",
  "split_type": 0,
  "rotate_type": 0,
  "max_size": 104857600,
  "max_count": 30,
  "level": 1,
  "enable_caller": true,
  "default_task_type": "main"
}

参数说明:

log_dir: 日志目录路径
split_type: 分片方式0=按月1=按天2=按小时3=按分钟4=按秒)
rotate_type: 轮转方式0=按大小1=按数量)
max_size: 最大文件大小字节仅在rotate_type=0时有效
max_count: 最大文件数量仅在rotate_type=1时有效
level: 日志级别0=SUCCESS1=INFO2=WARNING3=ERROR
enable_caller: 是否启用调用者信息
default_task_type: 默认任务类型

响应示例

"错误: 创建日志目录失败: permission denied"

创建带任务类型的上下文--CreateContextWithTaskType

请求信息

dll.CreateContextWithTaskType(loggerHandle, taskType)

请求参数

参数名 类型 必填 说明
loggerHandle string 日志器句柄
taskType string 任务类型

响应示例

"ctx_1645497600000000000"

错误响应示例

"错误: 无效的logger句柄"

记录信息日志--LogInfo

请求信息

dll.LogInfo(ctxHandle, message)

请求参数

参数名 类型 必填 说明
ctxHandle string 上下文句柄
message string 日志消息

响应示例

无返回值,日志将写入到对应的日志文件中。

记录错误日志--LogError

请求信息

dll.LogError(ctxHandle, message)

请求参数

参数名 类型 必填 说明
ctxHandle string 上下文句柄
message string 日志消息

响应示例

无返回值,日志将写入到对应的日志文件中。

记录警告日志--LogWarning

请求信息

dll.LogWarning(ctxHandle, message)

请求参数

参数名 类型 必填 说明
ctxHandle string 上下文句柄
message string 日志消息

响应示例

无返回值,日志将写入到对应的日志文件中。

记录成功日志--LogSuccess

请求信息

dll.LogSuccess(ctxHandle, message)

请求参数

参数名 类型 必填 说明
ctxHandle string 上下文句柄
message string 日志消息

响应示例

无返回值,日志将写入到对应的日志文件中。

获取日志条目--GetLogs

请求信息

dll.GetLogs(loggerHandle, configJSON)

请求参数

参数名 类型 必填 说明
loggerHandle string 日志器句柄
configJSON string 查询配置JSON

查询配置JSON结构

{
  "level": 1,
  "task_type": "main",
  "start_time": "2024-01-01 00:00:00",
  "end_time": "2024-01-31 23:59:59",
  "max_entries": 1000
}

参数说明:

level: 日志级别(-1表示所有级别
task_type: 任务类型(空字符串表示所有任务类型)
start_time: 开始时间(格式: 2006-01-02 15:04:05
end_time: 结束时间(格式: 2006-01-02 15:04:05
max_entries: 最大返回条目数0表示使用默认值1000

响应示例

{
  "count": 125,
  "entries": [
    {
      "timestamp": "2024-01-15 10:30:45.123",
      "level": "INFO",
      "task_type": "main",
      "caller": "logger.go:256",
      "message": "系统启动完成"
    },
    {
      "timestamp": "2024-01-15 10:31:15.456",
      "level": "ERROR",
      "task_type": "backup",
      "caller": "backup.go:89",
      "message": "备份文件失败: 磁盘空间不足"
    }
  ]
}

错误响应示例

{"error": "无效的logger句柄"}

获取日志文件列表--GetLogFiles

请求信息

dll.GetLogFiles(loggerHandle)

请求参数

参数名 类型 必填 说明
loggerHandle string 日志器句柄

响应示例

{
  "count": 8,
  "files": [
    {
      "level": "INFO",
      "task_type": "main",
      "file_name": "INFO-main-2024-01.log",
      "file_size": 1048576,
      "mod_time": "2024-01-15 10:30:45"
    },
    {
      "level": "ERROR",
      "task_type": "backup",
      "file_name": "ERROR-backup-2024-01.log",
      "file_size": 51200,
      "mod_time": "2024-01-15 10:31:15"
    }
  ]
}

错误响应示例

{"error": "无效的logger句柄"}

获取版本信息--GetVersion

请求信息

dll.GetVersion()

请求参数

无参数

响应示例

"v1"

关闭所有日志器--CloseAllLoggers

请求信息

dll.CloseAllLoggers()

请求参数

无参数

响应示例

"成功关闭所有logger"

错误响应示例

"关闭了5个logger其中1个出错最后错误: close file error"

释放C字符串内存--FreeString

请求信息

dll.FreeString(str)

请求参数

参数名 类型 必填 说明
str string 需要释放的字符串