Skip to content

Commit b139a96

Browse files
authored
feat(v2): new logging module (aws-powertools#1435)
1 parent 6b0fe5a commit b139a96

File tree

147 files changed

+6070
-2778
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

147 files changed

+6070
-2778
lines changed

docs/core/logging.md

+791-343
Large diffs are not rendered by default.

docs/stylesheets/extra.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
.md-grid {
2-
max-width: 81vw
2+
max-width: 90vw
33
}
44

55
.highlight .hll {

examples/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<version>2.0.0-SNAPSHOT</version>
2424
<packaging>pom</packaging>
2525

26-
<name>Powertools for AWS Lambda (Java) library Examples</name>
26+
<name>Powertools for AWS Lambda (Java) - Examples</name>
2727
<description>
2828
A suite of examples accompanying for Powertools for AWS Lambda (Java).
2929
</description>

examples/powertools-examples-batch/pom.xml

+3-4
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@
88
<version>2.0.0-SNAPSHOT</version>
99
<artifactId>powertools-examples-batch</artifactId>
1010
<packaging>jar</packaging>
11-
<name>Powertools for AWS Lambda (Java) library Examples - Batch</name>
11+
<name>Powertools for AWS Lambda (Java) - Examples - Batch</name>
1212

1313
<properties>
14-
<log4j.version>2.20.0</log4j.version>
1514
<maven.compiler.source>11</maven.compiler.source>
1615
<maven.compiler.target>11</maven.compiler.target>
17-
<aspectj.version>1.9.20</aspectj.version>
16+
<aspectj.version>1.9.20.1</aspectj.version>
1817
<sdk.version>2.21.1</sdk.version>
1918
</properties>
2019

@@ -26,7 +25,7 @@
2625
</dependency>
2726
<dependency>
2827
<groupId>software.amazon.lambda</groupId>
29-
<artifactId>powertools-logging</artifactId>
28+
<artifactId>powertools-logging-log4j</artifactId>
3029
<version>${project.version}</version>
3130
</dependency>
3231
<dependency>

examples/powertools-examples-batch/src/main/java/org/demo/batch/dynamo/DynamoDBStreamBatchHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
import com.amazonaws.services.lambda.runtime.RequestHandler;
55
import com.amazonaws.services.lambda.runtime.events.DynamodbEvent;
66
import com.amazonaws.services.lambda.runtime.events.StreamsEventResponse;
7-
import org.apache.logging.log4j.LogManager;
8-
import org.apache.logging.log4j.Logger;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
99
import software.amazon.lambda.powertools.batch.BatchMessageHandlerBuilder;
1010
import software.amazon.lambda.powertools.batch.handler.BatchMessageHandler;
1111

1212
public class DynamoDBStreamBatchHandler implements RequestHandler<DynamodbEvent, StreamsEventResponse> {
1313

14-
private final static Logger LOGGER = LogManager.getLogger(DynamoDBStreamBatchHandler.class);
14+
private static final Logger LOGGER = LoggerFactory.getLogger(DynamoDBStreamBatchHandler.class);
1515
private final BatchMessageHandler<DynamodbEvent, StreamsEventResponse> handler;
1616

1717
public DynamoDBStreamBatchHandler() {

examples/powertools-examples-batch/src/main/java/org/demo/batch/dynamo/DynamoDBWriter.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import java.util.UUID;
99
import java.util.stream.Collectors;
1010
import java.util.stream.IntStream;
11-
import org.apache.logging.log4j.LogManager;
12-
import org.apache.logging.log4j.Logger;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
1313
import org.demo.batch.model.DdbProduct;
1414
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
1515
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
@@ -21,7 +21,7 @@
2121

2222
public class DynamoDBWriter implements RequestHandler<ScheduledEvent, String> {
2323

24-
private static final Logger LOGGER = LogManager.getLogger(DynamoDBWriter.class);
24+
private static final Logger LOGGER = LoggerFactory.getLogger(DynamoDBWriter.class);
2525

2626
private final DynamoDbEnhancedClient enhancedClient;
2727

examples/powertools-examples-batch/src/main/java/org/demo/batch/kinesis/KinesisBatchHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
import com.amazonaws.services.lambda.runtime.RequestHandler;
55
import com.amazonaws.services.lambda.runtime.events.KinesisEvent;
66
import com.amazonaws.services.lambda.runtime.events.StreamsEventResponse;
7-
import org.apache.logging.log4j.LogManager;
8-
import org.apache.logging.log4j.Logger;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
99
import org.demo.batch.model.Product;
1010
import software.amazon.lambda.powertools.batch.BatchMessageHandlerBuilder;
1111
import software.amazon.lambda.powertools.batch.handler.BatchMessageHandler;
1212

1313
public class KinesisBatchHandler implements RequestHandler<KinesisEvent, StreamsEventResponse> {
1414

15-
private final static Logger LOGGER = LogManager.getLogger(KinesisBatchHandler.class);
15+
private static final Logger LOGGER = LoggerFactory.getLogger(KinesisBatchHandler.class);
1616
private final BatchMessageHandler<KinesisEvent, StreamsEventResponse> handler;
1717

1818
public KinesisBatchHandler() {

examples/powertools-examples-batch/src/main/java/org/demo/batch/kinesis/KinesisBatchSender.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import java.security.SecureRandom;
1111
import java.util.List;
1212
import java.util.stream.IntStream;
13-
import org.apache.logging.log4j.LogManager;
14-
import org.apache.logging.log4j.Logger;
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
1515
import org.demo.batch.model.Product;
1616
import software.amazon.awssdk.core.SdkBytes;
1717
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
@@ -28,7 +28,7 @@
2828
*/
2929
public class KinesisBatchSender implements RequestHandler<ScheduledEvent, String> {
3030

31-
private static final Logger LOGGER = LogManager.getLogger(KinesisBatchSender.class);
31+
private static final Logger LOGGER = LoggerFactory.getLogger(KinesisBatchSender.class);
3232

3333
private final KinesisClient kinesisClient;
3434
private final SecureRandom random;

examples/powertools-examples-batch/src/main/java/org/demo/batch/sqs/SqsBatchHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
import com.amazonaws.services.lambda.runtime.RequestHandler;
55
import com.amazonaws.services.lambda.runtime.events.SQSBatchResponse;
66
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
7-
import org.apache.logging.log4j.LogManager;
8-
import org.apache.logging.log4j.Logger;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
99
import org.demo.batch.model.Product;
1010
import software.amazon.lambda.powertools.batch.BatchMessageHandlerBuilder;
1111
import software.amazon.lambda.powertools.batch.handler.BatchMessageHandler;
1212

1313
public class SqsBatchHandler implements RequestHandler<SQSEvent, SQSBatchResponse> {
14-
private final static Logger LOGGER = LogManager.getLogger(SqsBatchHandler.class);
14+
private static final Logger LOGGER = LoggerFactory.getLogger(SqsBatchHandler.class);
1515
private final BatchMessageHandler<SQSEvent, SQSBatchResponse> handler;
1616

1717
public SqsBatchHandler() {

examples/powertools-examples-batch/src/main/java/org/demo/batch/sqs/SqsBatchSender.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import java.security.SecureRandom;
1111
import java.util.List;
1212
import java.util.stream.IntStream;
13-
import org.apache.logging.log4j.LogManager;
14-
import org.apache.logging.log4j.Logger;
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
1515
import org.demo.batch.model.Product;
1616
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
1717
import software.amazon.awssdk.services.sqs.SqsClient;
@@ -27,7 +27,7 @@
2727
*/
2828
public class SqsBatchSender implements RequestHandler<ScheduledEvent, String> {
2929

30-
private static final Logger LOGGER = LogManager.getLogger(SqsBatchSender.class);
30+
private static final Logger LOGGER = LoggerFactory.getLogger(SqsBatchSender.class);
3131

3232
private final SqsClient sqsClient;
3333
private final SecureRandom random;

examples/powertools-examples-cloudformation/pom.xml

+3-22
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,15 @@
77
<artifactId>powertools-examples-cloudformation</artifactId>
88
<packaging>jar</packaging>
99

10-
<name>Powertools for AWS Lambda (Java) library Examples - CloudFormation</name>
10+
<name>Powertools for AWS Lambda (Java) - Examples - CloudFormation</name>
1111

1212
<properties>
13-
<log4j.version>2.20.0</log4j.version>
1413
<maven.compiler.source>11</maven.compiler.source>
1514
<maven.compiler.target>11</maven.compiler.target>
1615
<lambda.core.version>1.2.3</lambda.core.version>
1716
<lambda.events.version>3.11.3</lambda.events.version>
1817
<aws.sdk.version>2.21.0</aws.sdk.version>
19-
<aspectj.version>1.9.20</aspectj.version>
18+
<aspectj.version>1.9.20.1</aspectj.version>
2019

2120
</properties>
2221
<dependencyManagement>
@@ -49,19 +48,9 @@
4948
</dependency>
5049
<dependency>
5150
<groupId>software.amazon.lambda</groupId>
52-
<artifactId>powertools-logging</artifactId>
51+
<artifactId>powertools-logging-log4j</artifactId>
5352
<version>${project.version}</version>
5453
</dependency>
55-
<dependency>
56-
<groupId>org.apache.logging.log4j</groupId>
57-
<artifactId>log4j-core</artifactId>
58-
<version>${log4j.version}</version>
59-
</dependency>
60-
<dependency>
61-
<groupId>org.apache.logging.log4j</groupId>
62-
<artifactId>log4j-api</artifactId>
63-
<version>${log4j.version}</version>
64-
</dependency>
6554
<dependency>
6655
<groupId>org.aspectj</groupId>
6756
<artifactId>aspectjrt</artifactId>
@@ -91,14 +80,6 @@
9180
</exclusion>
9281
</exclusions>
9382
</dependency>
94-
<dependency>
95-
<groupId>org.apache.logging.log4j</groupId>
96-
<artifactId>log4j-jcl</artifactId>
97-
<version>${log4j.version}</version>
98-
</dependency>
99-
100-
101-
10283
</dependencies>
10384

10485
<build>

examples/powertools-examples-cloudformation/src/main/java/helloworld/App.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import com.amazonaws.services.lambda.runtime.Context;
44
import com.amazonaws.services.lambda.runtime.events.CloudFormationCustomResourceEvent;
55
import java.util.Objects;
6-
import org.apache.logging.log4j.LogManager;
7-
import org.apache.logging.log4j.Logger;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
88
import software.amazon.awssdk.awscore.exception.AwsServiceException;
99
import software.amazon.awssdk.core.exception.SdkClientException;
1010
import software.amazon.awssdk.core.waiters.WaiterResponse;
@@ -24,7 +24,7 @@
2424
*/
2525

2626
public class App extends AbstractCustomResourceHandler {
27-
private final static Logger log = LogManager.getLogger(App.class);
27+
private static final Logger log = LoggerFactory.getLogger(App.class);
2828
private final S3Client s3Client;
2929

3030
public App() {
@@ -47,7 +47,7 @@ protected Response create(CloudFormationCustomResourceEvent cloudFormationCustom
4747
Objects.requireNonNull(cloudFormationCustomResourceEvent.getResourceProperties().get("BucketName"),
4848
"BucketName cannot be null.");
4949

50-
log.info(cloudFormationCustomResourceEvent);
50+
log.info(cloudFormationCustomResourceEvent.toString());
5151
String bucketName = (String) cloudFormationCustomResourceEvent.getResourceProperties().get("BucketName");
5252
log.info("Bucket Name {}", bucketName);
5353
try {
@@ -57,7 +57,7 @@ protected Response create(CloudFormationCustomResourceEvent cloudFormationCustom
5757
return Response.success(bucketName);
5858
} catch (AwsServiceException | SdkClientException e) {
5959
// In case of error, return a failed response, with the bucketName as the physicalResourceId
60-
log.error(e);
60+
log.error("Unable to create bucket", e);
6161
return Response.failed(bucketName);
6262
}
6363
}
@@ -77,7 +77,7 @@ protected Response update(CloudFormationCustomResourceEvent cloudFormationCustom
7777
Objects.requireNonNull(cloudFormationCustomResourceEvent.getResourceProperties().get("BucketName"),
7878
"BucketName cannot be null.");
7979

80-
log.info(cloudFormationCustomResourceEvent);
80+
log.info(cloudFormationCustomResourceEvent.toString());
8181
// Get the physicalResourceId. physicalResourceId is the value returned to CloudFormation in the Create request, and passed in on subsequent requests (e.g. UPDATE or DELETE)
8282
String physicalResourceId = cloudFormationCustomResourceEvent.getPhysicalResourceId();
8383
log.info("Physical Resource ID {}", physicalResourceId);
@@ -94,7 +94,7 @@ protected Response update(CloudFormationCustomResourceEvent cloudFormationCustom
9494
// Return a successful response with the newBucketName
9595
return Response.success(newBucketName);
9696
} catch (AwsServiceException | SdkClientException e) {
97-
log.error(e);
97+
log.error("Unable to create bucket", e);
9898
return Response.failed(newBucketName);
9999
}
100100
} else {
@@ -120,7 +120,7 @@ protected Response delete(CloudFormationCustomResourceEvent cloudFormationCustom
120120
Objects.requireNonNull(cloudFormationCustomResourceEvent.getPhysicalResourceId(),
121121
"PhysicalResourceId cannot be null.");
122122

123-
log.info(cloudFormationCustomResourceEvent);
123+
log.info(cloudFormationCustomResourceEvent.toString());
124124
// Get the physicalResourceId. physicalResourceId is the value provided to CloudFormation in the Create request.
125125
String bucketName = cloudFormationCustomResourceEvent.getPhysicalResourceId();
126126
log.info("Bucket Name {}", bucketName);
@@ -135,7 +135,7 @@ protected Response delete(CloudFormationCustomResourceEvent cloudFormationCustom
135135
return Response.success(bucketName);
136136
} catch (AwsServiceException | SdkClientException e) {
137137
// Return a failed response in case of errors during the bucket deletion
138-
log.error(e);
138+
log.error("Unable to delete bucket", e);
139139
return Response.failed(bucketName);
140140
}
141141
} else {
@@ -166,7 +166,7 @@ private void createBucket(String bucketName) {
166166
s3Client.createBucket(createBucketRequest);
167167
WaiterResponse<HeadBucketResponse> waiterResponse =
168168
waiter.waitUntilBucketExists(HeadBucketRequest.builder().bucket(bucketName).build());
169-
waiterResponse.matched().response().ifPresent(log::info);
169+
waiterResponse.matched().response().ifPresent(res -> log.info(res.toString()));
170170
log.info("Bucket Created {}", bucketName);
171171
}
172172
}

examples/powertools-examples-core-utilities/cdk/app/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
33
<modelVersion>4.0.0</modelVersion>
44

5-
<name>Powertools for AWS Lambda (Java) library Examples - Core Utilities (logging, tracing, metrics) with CDK</name>
5+
<name>Powertools for AWS Lambda (Java) - Examples - Core Utilities (logging, tracing, metrics) with CDK</name>
66
<groupId>software.amazon.lambda.examples</groupId>
77
<!-- TODO TODO TODO this should build from SNAPSHOT, but it doesn't, because the snapshots
88
don't appear in the docker environment CDK builds it in in our CDK tests. How to procede? V2 blocker -->
@@ -14,7 +14,7 @@
1414
<log4j.version>2.20.0</log4j.version>
1515
<maven.compiler.source>11</maven.compiler.source>
1616
<maven.compiler.target>11</maven.compiler.target>
17-
<aspectj.version>1.9.20</aspectj.version>
17+
<aspectj.version>1.9.20.1</aspectj.version>
1818
</properties>
1919

2020
<dependencies>

examples/powertools-examples-core-utilities/cdk/app/src/main/java/helloworld/App.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
import java.util.HashMap;
3030
import java.util.Map;
3131
import java.util.stream.Collectors;
32-
import org.apache.logging.log4j.LogManager;
33-
import org.apache.logging.log4j.Logger;
32+
import org.slf4j.Logger;
33+
import org.slf4j.LoggerFactory;
3434
import software.amazon.cloudwatchlogs.emf.model.DimensionSet;
3535
import software.amazon.cloudwatchlogs.emf.model.Unit;
3636
import software.amazon.lambda.powertools.logging.Logging;
@@ -44,8 +44,7 @@
4444
* Handler for requests to Lambda function.
4545
*/
4646
public class App implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
47-
private final static Logger log = LogManager.getLogger(App.class);
48-
47+
private static final Logger log = LoggerFactory.getLogger(App.class);
4948
@Logging(logEvent = true, samplingRate = 0.7)
5049
@Tracing(captureMode = CaptureMode.RESPONSE_AND_ERROR)
5150
@Metrics(namespace = "ServerlessAirline", service = "payment", captureColdStart = true)

examples/powertools-examples-core-utilities/gradle/build.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ dependencies {
2828
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.2.2'
2929
implementation 'com.amazonaws:aws-lambda-java-events:3.11.0'
3030
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2'
31+
implementation 'org.aspectj:aspectjrt:1.9.20.1'
3132
aspect 'software.amazon.lambda:powertools-tracing:2.0.0-SNAPSHOT'
32-
aspect 'software.amazon.lambda:powertools-logging:2.0.0-SNAPSHOT'
33+
aspect 'software.amazon.lambda:powertools-logging-log4j:2.0.0-SNAPSHOT'
3334
aspect 'software.amazon.lambda:powertools-metrics:2.0.0-SNAPSHOT'
3435
}
3536

examples/powertools-examples-core-utilities/gradle/src/main/java/helloworld/App.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
import java.util.HashMap;
3030
import java.util.Map;
3131
import java.util.stream.Collectors;
32-
import org.apache.logging.log4j.LogManager;
33-
import org.apache.logging.log4j.Logger;
32+
import org.slf4j.Logger;
33+
import org.slf4j.LoggerFactory;
3434
import software.amazon.cloudwatchlogs.emf.model.DimensionSet;
3535
import software.amazon.cloudwatchlogs.emf.model.Unit;
3636
import software.amazon.lambda.powertools.logging.Logging;
@@ -44,7 +44,7 @@
4444
* Handler for requests to Lambda function.
4545
*/
4646
public class App implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
47-
private final static Logger log = LogManager.getLogger(App.class);
47+
private static final Logger log = LoggerFactory.getLogger(App.class);
4848

4949
@Logging(logEvent = true, samplingRate = 0.7)
5050
@Tracing(captureMode = CaptureMode.RESPONSE_AND_ERROR)

examples/powertools-examples-core-utilities/kotlin/build.gradle.kts

+8-8
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ repositories {
99
}
1010

1111
dependencies {
12-
implementation("com.amazonaws:aws-lambda-java-core:1.2.2")
13-
implementation("com.fasterxml.jackson.core:jackson-annotations:2.13.2")
14-
implementation("com.fasterxml.jackson.core:jackson-databind:2.13.2.2")
15-
implementation("com.amazonaws:aws-lambda-java-events:3.11.0")
16-
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2")
12+
implementation("com.amazonaws:aws-lambda-java-core:1.2.3")
13+
implementation("com.fasterxml.jackson.core:jackson-annotations:2.15.1")
14+
implementation("com.fasterxml.jackson.core:jackson-databind:2.15.3")
15+
implementation("com.amazonaws:aws-lambda-java-events:3.11.3")
16+
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2")
17+
implementation("org.aspectj:aspectjrt:1.9.20.1")
1718
aspect("software.amazon.lambda:powertools-tracing:2.0.0-SNAPSHOT")
18-
aspect("software.amazon.lambda:powertools-logging:2.0.0-SNAPSHOT")
19+
aspect("software.amazon.lambda:powertools-logging-log4j:2.0.0-SNAPSHOT")
1920
aspect("software.amazon.lambda:powertools-metrics:2.0.0-SNAPSHOT")
20-
testImplementation("junit:junit:4.13.2")
21-
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
21+
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10")
2222
}
2323

2424
kotlin {

0 commit comments

Comments
 (0)