go get github.com/ks3sdk/klog-go-sdk
import (
"time"
sdkCredentials "github.com/ks3sdk/klog-go-sdk/credentials"
sdk "github.com/ks3sdk/klog-go-sdk/klog"
sdkPb "github.com/ks3sdk/klog-go-sdk/protobuf"
sdkService "github.com/ks3sdk/klog-go-sdk/service"
)
// 鉴权配置
credentials := sdkCredentials.NewStaticCredentials("<AccessKeyID>", "<AccessKeySecret>", "")
// klog配置
klogConfig := &sdkService.Config{
Credentials: credentials.NewStaticCredentials(AK, SK, ""),
Endpoint: "klog-cn-beijing-internal.ksyun.com",
DisableSSL: true,
// sdk自身日志,可使用符合sdkService.Logger接口的日志对象。
// 也可使用klog自带的简单日志模块sdkService.StdOutLogger。
Logger: nil,
// 是否打印请求头、响应头等
Debug: false,
}
// klog客户端
client := sdk.New(klogConfig)
// 组装日志数据
log1 := &sdkPb.Log{
Time: time.Now().UnixNano() / 1000000, // 举例日志产生时间的毫秒数
Contents: []*sdkPb.Log_Content{
{Key: "key1", Value: "value1"},
{Key: "key2", Value: "value2"},
},
}
log2 := &sdkPb.Log{
Time: time.Now().UnixNano() / 1000000, // 举例日志产生时间的毫秒数
Contents: []*sdkPb.Log_Content{
{Key: "key1", Value: "value3"},
{Key: "key2", Value: "value4"},
},
}
logGroup := &sdkPb.LogGroup{
Logs: make([]*sdkPb.Log, 0),
Filename: filename,
Source: hostname,
}
logGroup.Logs = append(logGroup.Logs, log1)
logGroup.Logs = append(logGroup.Logs, log2)
// 同步发送
err := client.PutLogs(logGroup, "<ProjectName>", "<LogPoolName>")
// 异步配置
asyncClientOptions := &sdk.AsyncClientOptions{
ProjectName: "<ProjectName>",
LogPoolName: "<LogPoolName>",
// 用户接收每条日志发送状态的回调函数(选填)
// func(log *pb.Log, seqNo uint64, err error)
// log: 日志数据
// seqNo: 日志顺序号
// err: nil表示发送成功。非nil表示错误,并且该条日志被丢弃。
Callback: nil,
// 日志池不存在时,是否丢弃日志(选填)
DropIfPoolNotExists: false,
// 等待发送日志时的缓冲队列长度(选填)
QueueSize: 2048,
}
// 异步客户端
asyncClient := sdk.NewAsyncClient(asyncClientOptions, klogConfig)
// 推入发送队列,返回用于跟踪状态的顺序号。
seqNo1 := asyncClient.PushLog(log1)
seqNo2 := asyncClient.PushLog(log2)
// 用于进程退出
asyncClient.Stop(true)
用于向同一个用户的多个日志池发送数据
//
asyncMultiPoolClientOptions := &sdk.AsyncMultiPoolClientOptions{
// 同AsyncClientOptions
Callback: nil,
// 同AsyncClientOptions
DropIfPoolNotExists: false,
// 同AsyncClientOptions
QueueSize: 2048,
}
// 多日志池异步客户端
client := sdk.NewAsyncMultiPoolClient(asyncMultiPoolClientOptions, klogConfig)
// 推入发送队列,返回用于跟踪状态的顺序号。
seqNo1 := client.PushLog("<projectName1>", "<logPoolName1>", log1)
seqNo2 := client.PushLog("<projectName2>", "<logPoolName2>", log2)
// 用于进程退出
client.Stop(true)