尽管GO AWS SDK没有错误,但无法使CloudWatchLogs正常工作

尽管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

我根据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/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
}