Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,9 @@ public int getMemoryLimitInMB() {
public LambdaLogger getLogger() {
return null;
}

@Override
public String getTenantId() {
return "test-tenant";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_VERSION;
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.SAMPLING_RATE;
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.SERVICE;
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.TENANT_ID;

import java.io.IOException;
import java.util.Collections;
Expand Down Expand Up @@ -168,6 +169,22 @@ public void resolve(LogEvent logEvent, JsonWriter jsonWriter) {
private static final EventResolver REGION_RESOLVER =
(final LogEvent logEvent, final JsonWriter jsonWriter) ->
jsonWriter.writeString(SystemWrapper.getenv(LambdaConstants.AWS_REGION_ENV));

private static final EventResolver TENANT_ID_RESOLVER = new EventResolver() {
@Override
public boolean isResolvable(LogEvent logEvent) {
final String tenantId =
logEvent.getContextData().getValue(PowertoolsLoggedFields.TENANT_ID.getName());
return null != tenantId;
}

@Override
public void resolve(LogEvent logEvent, JsonWriter jsonWriter) {
final String tenantId =
logEvent.getContextData().getValue(PowertoolsLoggedFields.TENANT_ID.getName());
jsonWriter.writeString(tenantId);
}
};

public static final String LAMBDA_ARN_REGEX =
"^arn:(aws|aws-us-gov|aws-cn):lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9-_]+(:[a-zA-Z0-9-_]+)?$";
Expand Down Expand Up @@ -233,6 +250,7 @@ public void resolve(LogEvent logEvent, JsonWriter jsonWriter) {
{ FUNCTION_TRACE_ID.getName(), XRAY_TRACE_RESOLVER },
{ CORRELATION_ID.getName(), CORRELATION_ID_RESOLVER },
{ SAMPLING_RATE.getName(), SAMPLING_RATE_RESOLVER },
{ TENANT_ID.getName(), TENANT_ID_RESOLVER },
{ "region", REGION_RESOLVER },
{ "account_id", ACCOUNT_ID_RESOLVER }
}).collect(Collectors.toMap(data -> (String) data[0], data -> (EventResolver) data[1])));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@
"$resolver": "powertools",
"field": "correlation_id"
},
"tenant.id": {
"$resolver": "powertools",
"field": "tenant_id"
},
"": {
"$resolver": "powertools"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@
"$resolver": "powertools",
"field": "correlation_id"
},
"tenant_id": {
"$resolver": "powertools",
"field": "tenant_id"
},
"": {
"$resolver": "powertools"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_REQUEST_ID;
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_TRACE_ID;
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_VERSION;
import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.TENANT_ID;
import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeArguments;
import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeMDCEntries;
import static software.amazon.lambda.powertools.logging.logback.JsonUtils.serializeTimestamp;
Expand Down Expand Up @@ -74,6 +75,7 @@ public class LambdaEcsEncoder extends EncoderBase<ILoggingEvent> {
protected static final String FUNCTION_MEMORY_ATTR_NAME = "faas.memory";
protected static final String FUNCTION_TRACE_ID_ATTR_NAME = "trace.id";
protected static final String CORRELATION_ID_ATTR_NAME = "correlation.id";
protected static final String TENANT_ID_ATTR_NAME = "tenant.id";

protected static final String ECS_VERSION = "1.2.0";
protected static final String CLOUD_PROVIDER = "aws";
Expand Down Expand Up @@ -163,6 +165,11 @@ private void serializeFunctionInfo(JsonSerializer serializer, String arn, Map<St
serializer.writeRaw(',');
serializer.writeStringField(CORRELATION_ID_ATTR_NAME, correlationId);
}
String tenantId = mdcPropertyMap.get(TENANT_ID.getName());
if (tenantId != null) {
serializer.writeRaw(',');
serializer.writeStringField(TENANT_ID_ATTR_NAME, tenantId);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ public void setIncludeThreadInfo(boolean includeThreadInfo) {
* <li>xray_trace_id</li>
* <li>sampling_rate</li>
* <li>service</li>
* <li>tenant_id</li>
* </ul>
* <br/>
* We strongly recommend to keep these information.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ void shouldLogInJsonFormat() {
// THEN
File logFile = new File("target/logfile.json");
assertThat(contentOf(logFile)).contains(
"{\"level\":\"DEBUG\",\"message\":\"Test debug event\",\"cold_start\":true,\"function_arn\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"function_memory_size\":128,\"function_name\":\"test-function\",\"function_request_id\":\"test-request-id\",\"function_version\":1,\"service\":\"testLogback\",\"xray_trace_id\":\"1-63441c4a-abcdef012345678912345678\",\"myKey\":\"myValue\",\"timestamp\":");
"{\"level\":\"DEBUG\",\"message\":\"Test debug event\",\"cold_start\":true,\"function_arn\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"function_memory_size\":128,\"function_name\":\"test-function\",\"function_request_id\":\"test-request-id\",\"function_version\":1,\"service\":\"testLogback\",\"tenant_id\":\"test-tenant\",\"xray_trace_id\":\"1-63441c4a-abcdef012345678912345678\",\"myKey\":\"myValue\",\"timestamp\":");
}

@Test
Expand Down Expand Up @@ -201,7 +201,7 @@ void shouldNotLogPowertoolsInfo() {

// THEN
assertThat(result).contains(
"{\"level\":\"INFO\",\"message\":\"message\",\"cold_start\":false,\"function_arn\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"function_memory_size\":128,\"function_name\":\"test-function\",\"function_request_id\":\"test-request-id\",\"function_version\":1,\"sampling_rate\":0.2,\"service\":\"Service\",\"timestamp\":");
"{\"level\":\"INFO\",\"message\":\"message\",\"cold_start\":false,\"function_arn\":\"arn:aws:lambda:us-east-1:123456789012:function:test\",\"function_memory_size\":128,\"function_name\":\"test-function\",\"function_request_id\":\"test-request-id\",\"function_version\":1,\"sampling_rate\":0.2,\"service\":\"Service\",\"tenant_id\":\"test-tenant\",\"timestamp\":");

// WHEN (powertoolsInfo = false)
encoder.setIncludePowertoolsInfo(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ public enum PowertoolsLoggedFields {
FUNCTION_TRACE_ID("xray_trace_id"),
SAMPLING_RATE("sampling_rate"),
CORRELATION_ID("correlation_id"),
SERVICE("service");
SERVICE("service"),
TENANT_ID("tenant_id");

private final String name;

Expand All @@ -55,6 +56,7 @@ public static Map<String, String> setValuesFromLambdaContext(Context context) {
hashMap.put(FUNCTION_ARN.name, context.getInvokedFunctionArn());
hashMap.put(FUNCTION_MEMORY_SIZE.name, String.valueOf(context.getMemoryLimitInMB()));
hashMap.put(FUNCTION_REQUEST_ID.name, String.valueOf(context.getAwsRequestId()));
hashMap.put(TENANT_ID.name, context.getTenantId());

return hashMap;
}
Expand Down