上传日志到aws日志服务

  |  

安装包

1
2
3
4
5
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>cloudwatchlogs</artifactId>
<version>2.16.60</version>
</dependency>

使用

1
2
3
4
HashMap<String, Object> map = new HashMap<>();
map.put("key1", "val1");
map.put("key2", "val2");
CloudWatchLog.putLog(map);

工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class CloudWatchLog {
private static final String accessKey = "<your key>";
private static final String secretKey = "<your secret>";
private static final String region = "us-west-1";
// 日志组的名称
private static final String groupName = "klover-test";
// 日志流的名称
private static final String streamName = "klover";

private static CloudWatchLogsClient slsClient;

static {
AwsBasicCredentials credentials = AwsBasicCredentials.create(
accessKey,
secretKey
);
slsClient = CloudWatchLogsClient.builder()
.region(Region.of(region))
.credentialsProvider(() -> credentials)
.build();
}

/**
* 上传日志
*
* @param params 参数
*/
public static void putLog(Map<String, Object> params) {
DescribeLogStreamsRequest logStreamRequest = DescribeLogStreamsRequest.builder()
.logGroupName(groupName)
.logStreamNamePrefix(streamName)
.build();

DescribeLogStreamsResponse describeLogStreamsResponse = slsClient.describeLogStreams(logStreamRequest);

// Assume that a single stream is returned since a specific stream name was
// specified in the previous request.
String sequenceToken = describeLogStreamsResponse.logStreams().getFirst().uploadSequenceToken();

// Build an input log message to put to CloudWatch.
InputLogEvent inputLogEvent = InputLogEvent.builder()
.message(JsonUtil.toJSONString(params))
.timestamp(System.currentTimeMillis())
.build();

// Specify the request parameters.
// Sequence token is required so that the log can be written to the
// latest location in the stream.
PutLogEventsRequest putLogEventsRequest = PutLogEventsRequest.builder()
.logEvents(Collections.singletonList(inputLogEvent))
.logGroupName(groupName)
.logStreamName(streamName)
.sequenceToken(sequenceToken)
.build();

slsClient.putLogEvents(putLogEventsRequest);
}
}

代码示例