获取SerializationException同时使用golang试图PutLogEvents上的

2019-10-30 13:13发布

我想实现我的使用计划如下:在AWS CloudWatch的创建日志组创建上面日志组日志流将记录的事件上面日志流

所有这一切都用走郎

package main

import (
    "time"
    "fmt"
    "github.com/jcxplorer/cwlogger"
    "github.com/aws/aws-sdk-go/service/cloudwatchlogs"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/aws"
)

func main() {
    sess := session.Must(session.NewSessionWithOptions(session.Options{
        SharedConfigState: session.SharedConfigEnable,
    }))

    svc := cloudwatchlogs.New(sess)
    logGroupName := "my-log-group";
    logStreamName := "my-log-stream";
    logGroupInput := cloudwatchlogs.CreateLogGroupInput{LogGroupName: &logGroupName}
    svc.CreateLogGroup(&logGroupInput);
    logStreamInput := cloudwatchlogs.CreateLogStreamInput{LogGroupName: &logGroupName, LogStreamName: &logStreamName}
    svc.CreateLogStream(&logStreamInput)

    logevents := make([]*cloudwatchlogs.InputLogEvent, 1)

    logevents = append(logevents, &cloudwatchlogs.InputLogEvent{
        Message:   aws.String("Simple log message"),
        Timestamp: aws.Int64(111),
    })

    p := cloudwatchlogs.PutLogEventsInput{LogEvents: logevents, LogGroupName: &logGroupName, LogStreamName: &logStreamName}
    resp, err := svc.PutLogEvents(&p)
    if err != nil {
        panic(err)
    }
    fmt.Print("Next Token: {}", resp.NextSequenceToken)
}

现在,当我运行上面的代码,它成功地创建日志组和日志流,我可以证实,在AWS CloudWatch的。 但由于某些原因PutLogEvents失败,以下错误:

panic: SerializationException: 
    status code: 400, request id: 0685efcc-47e3-11e9-b528-81f33ec2f468

我不知道什么可能是错在这里。 任何建议或方向将是很有益的。

提前致谢。

Answer 1:

原因是SerializationException: logevents := make([]*cloudwatchlogs.InputLogEvent, 1)接着,通过该创建在切片第一空条目追加。 我替换代码logevents := make([]*cloudwatchlogs.InputLogEvent, 0)和它得到了解决。

此外调试时发现,为什么日志未得到填充我想通了,使用时间戳值是无效的。 根据AWS的每个事件的文件时间戳不能超过14天,不能超过2小时的未来。 这里是链接: https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html

希望这将是有帮助的人在未来面临着类似的问题。



文章来源: Getting SerializationException while trying to PutLogEvents on cloudwatch using golang