# logger.dll 使用教程 ## 1. 创建DLL工具实例 ### 加载DLL文件 ```gotemplate // 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字符串 ```gotemplate // 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 ### 请求信息 ```gotemplate dll.CreateLogger(configJSON) ``` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--|--|--|--------------| | configJSON | string | 是 | 配置信息JSON字符串 | #### 配置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" } ``` #### 参数说明: ```text 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=SUCCESS,1=INFO,2=WARNING,3=ERROR) enable_caller: 是否启用调用者信息 default_task_type: 默认任务类型 ``` ### 响应示例 ```json "错误: 创建日志目录失败: permission denied" ``` ## 创建带任务类型的上下文--CreateContextWithTaskType ### 请求信息 ```gotemplate dll.CreateContextWithTaskType(loggerHandle, taskType) ``` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--|--|--|--------------| | loggerHandle | string | 是 | 日志器句柄 | | taskType | string | 是 | 任务类型 | ### 响应示例 ```json "ctx_1645497600000000000" ``` #### 错误响应示例 ```json "错误: 无效的logger句柄" ``` ## 记录信息日志--LogInfo ### 请求信息 ```gotemplate dll.LogInfo(ctxHandle, message) ``` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--|--|--|--------------| | ctxHandle | string | 是 | 上下文句柄 | | message | string | 是 | 日志消息 | ### 响应示例 ```text 无返回值,日志将写入到对应的日志文件中。 ``` ## 记录错误日志--LogError ### 请求信息 ```gotemplate dll.LogError(ctxHandle, message) ``` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--|--|--|--------------| | ctxHandle | string | 是 | 上下文句柄 | | message | string | 是 | 日志消息 | ### 响应示例 ```text 无返回值,日志将写入到对应的日志文件中。 ``` ## 记录警告日志--LogWarning ### 请求信息 ```gotemplate dll.LogWarning(ctxHandle, message) ``` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--|--|--|--------------| | ctxHandle | string | 是 | 上下文句柄 | | message | string | 是 | 日志消息 | ### 响应示例 ```text 无返回值,日志将写入到对应的日志文件中。 ``` ## 记录成功日志--LogSuccess ### 请求信息 ```gotemplate dll.LogSuccess(ctxHandle, message) ``` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--|--|--|--------------| | ctxHandle | string | 是 | 上下文句柄 | | message | string | 是 | 日志消息 | ### 响应示例 ```text 无返回值,日志将写入到对应的日志文件中。 ``` ## 获取日志条目--GetLogs ### 请求信息 ```gotemplate dll.GetLogs(loggerHandle, configJSON) ``` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--|--|--|-----------| | loggerHandle | string | 是 | 日志器句柄 | | configJSON | string | 是 | 查询配置JSON | #### 查询配置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 } ``` #### 参数说明: ```text level: 日志级别(-1表示所有级别) task_type: 任务类型(空字符串表示所有任务类型) start_time: 开始时间(格式: 2006-01-02 15:04:05) end_time: 结束时间(格式: 2006-01-02 15:04:05) max_entries: 最大返回条目数(0表示使用默认值1000) ``` ### 响应示例 ```json { "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": "备份文件失败: 磁盘空间不足" } ] } ``` ### 错误响应示例 ```json {"error": "无效的logger句柄"} ``` ## 获取日志文件列表--GetLogFiles ### 请求信息 ```gotemplate dll.GetLogFiles(loggerHandle) ``` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--|--|--|-----------| | loggerHandle | string | 是 | 日志器句柄 | ### 响应示例 ```json { "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" } ] } ``` ### 错误响应示例 ```json {"error": "无效的logger句柄"} ``` ## 获取版本信息--GetVersion ### 请求信息 ```gotemplate dll.GetVersion() ``` ### 请求参数 ```text 无参数 ``` ### 响应示例 ```json "v1" ``` ## 关闭所有日志器--CloseAllLoggers ### 请求信息 ```gotemplate dll.CloseAllLoggers() ``` ### 请求参数 ```text 无参数 ``` ### 响应示例 ```json "成功关闭所有logger" ``` ### 错误响应示例 ```json "关闭了5个logger,其中1个出错,最后错误: close file error" ``` ## 释放C字符串内存--FreeString ### 请求信息 ```gotemplate dll.FreeString(str) ``` ### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--|--|--|-----------| | str | string | 是 | 需要释放的字符串 |