尽管GO AWS SDK没有错误,但无法使CloudWatchLogs正常工作
我根据AWS GO SDK为尽管GO AWS SDK没有错误,但无法使CloudWatchLogs正常工作,go,amazon-cloudwatch,Go,Amazon Cloudwatch,我根据AWS GO SDK为InvalidSequenceTokenException方法编写了一些代码。SDK似乎有一些我已经发现的错误,我正在获得成功调用API的预期响应,该API返回下一个序列令牌以用于后续调用。这是我的密码 import ( "github.com/aws/aws-sdk-go/service/cloudwatchlogs" "github.com/aws/aws-sdk-go/aws" "github.com/opensoft/dvs-api/c
InvalidSequenceTokenException
方法编写了一些代码。SDK似乎有一些我已经发现的错误,我正在获得成功调用API的预期响应,该API返回下一个序列令牌以用于后续调用。这是我的密码
import (
"github.com/aws/aws-sdk-go/service/cloudwatchlogs"
"github.com/aws/aws-sdk-go/aws"
"github.com/opensoft/dvs-api/config"
"strings"
)
func nextSequenceToken() (string, error) {
params := &cloudwatchlogs.DescribeLogStreamsInput{
LogGroupName: aws.String(config.AwsLogGroup), // Required
LogStreamNamePrefix: aws.String(config.AwsLogStream),
Descending: aws.Bool(true),
Limit: aws.Int64(1),
}
resp, err := config.AwsCloudWatchLogsSvc.DescribeLogStreams(params)
if err != nil {
return "", err
}
// Parsing from string because resp.NextToken is *always* empty ... bug?
parsed := ""
parts := strings.Split(resp.GoString(), "\n")
for _, part := range parts {
if strings.Contains(part, "UploadSequenceToken") {
parsed = strings.TrimLeft(part, "UploadSequenceToken: \"")
parsed = strings.TrimRight(parsed, "\"")
}
}
return parsed, nil
}
func LogEvent(message string, unixTime int64) error {
nextToken, te := nextSequenceToken()
if te != nil {
return te
}
params := &cloudwatchlogs.PutLogEventsInput{
LogEvents: []*cloudwatchlogs.InputLogEvent{// Required
{// Required
Message: aws.String(message), // Required
Timestamp: aws.Int64(unixTime), // Required
},
// More values...
},
LogGroupName: aws.String(config.AwsLogGroup), // Required
LogStreamName: aws.String(config.AwsLogStream), // Required
}
if nextToken != "" {
params.SequenceToken = &nextToken
}
resp, err := config.AwsCloudWatchLogsSvc.PutLogEvents(params)
if err != nil {
return err
}
// Parsing from string because resp.NextSequenceToken is *always* empty ... bug?
parsed := ""
parts := strings.Split(resp.GoString(), "\n")
for _, part := range parts {
if strings.Contains(part, "NextSequenceToken") {
parsed = strings.TrimLeft(part, "NextSequenceToken: \"")
parsed = strings.TrimRight(parsed, "\",")
}
}
return nil
}
我还继续从组中删除了日志流,只是为了确保有连接,我确实从AWS那里得到了一个错误,告诉我日志流无效,同样,重新创建日志流修复了所有问题
因此,我的代码看起来是正确的,但是我正在记录的内容没有显示在CloudWatch日志中,并且我的日志仍然是空的。如果我的代码是正确的,并且没有从AWS返回任何错误,那么我还应该在哪里查找问题?您的nextSequenceToken()返回一个尾随字符。这是修正后的函数
func nextSequenceToken() (string, error) {
params := &cloudwatchlogs.DescribeLogStreamsInput{
LogGroupName: aws.String(config.AwsLogGroup), // Required
LogStreamNamePrefix: aws.String(config.AwsLogStream),
Descending: aws.Bool(true),
Limit: aws.Int64(1),
}
resp, err := config.AwsCloudWatchLogsSvc.DescribeLogStreams(params)
if err != nil {
return "", err
}
return *(resp.LogStreams[0].UploadSequenceToken), nil
}