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

322 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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=SUCCESS1=INFO2=WARNING3=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 | 是 | 需要释放的字符串 |