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=SUCCESS,1=INFO,2=WARNING,3=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 |
是 |
需要释放的字符串 |