322 lines
7.9 KiB
Markdown
322 lines
7.9 KiB
Markdown
# 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 | 是 | 需要释放的字符串 | |