generated from amazon-archives/__template_Apache-2.0
    
        
        - 
                Notifications
    You must be signed in to change notification settings 
- Fork 176
Closed
Labels
bugSomething isn't workingSomething isn't workingcompletedThis item is complete and has been merged/shippedThis item is complete and has been merged/shippedloggerThis item relates to the Logger UtilityThis item relates to the Logger Utility
Milestone
Description
Bug description
When logger capture context information, it adds cold_start key with boolean value into each log.
I call the same Lambda twice. The cold_start value should be false after the first call. However, it is still true in other calls.
Expected Behavior
cold_start value should be false in subsequent calls.
Current Behavior
cold_start value is still true in subsequent calls.
Possible Solution
Steps to Reproduce
- This is the Lambda function code I use.
import { injectLambdaContext, Logger } from "../../src";
import { APIGatewayProxyEvent } from "aws-lambda";
import middy from "@middy/core"
const persistentKey = process.env.PERSISTENT_KEY_IN_LOG;
const persistentValue = process.env.PERSISTENT_VALUE_IN_LOG;
const logger = new Logger({
  persistentLogAttributes: {
    [persistentKey]: persistentValue,
  }
});
const testFunction = async (event: APIGatewayProxyEvent) => {
  // 1. Context data appears in log
  // 2. LOG_LEVEL works as expected
  // 3. persistentLogAttributes prop works 
  logger.debug("##### This should not appear");
  logger.info("This is an INFO log with some context and persistent key");
  // 4. Can add additional key value in the log method
  logger.info("This is an INFO log with some context", {
    additionalKey: 'additionalValue'
  });
  // 5. Can log error object
  try {
    throw new Error('you cannot prevent this');
  }catch(e){
    logger.error("There was an error", e);
  }
  return formatJSONResponse({
    message: `E2E testing Lambda function`,
    event,
  });
}
const formatJSONResponse = (response: Record<string, any>) => {
  return {
    statusCode: 200,
    body: JSON.stringify(response)
  }
}
export const handler = middy(testFunction)
  .use(injectLambdaContext(logger));- I deploy and trigger the Lambda function twice with this code
    const sdkProvider = await SdkProvider.withAwsCliCompatibleDefaults({
      profile: process.env.AWS_PROFILE,
    });
    const cloudFormation = new CloudFormationDeployments({ sdkProvider });
    // WHEN lambda function is deployed
    const result = await cloudFormation.deployStack({
      stack: stackArtifact,
      quiet: true,
    });
    logGroupName = result.outputs[STACK_OUTPUT_LOG_GROUP];
    
    // and invoked twice (one for cold start, another for warm start)
    let promises = [];
    
    for (let i = 0; i < invocationCount; i++) {
      const invokePromise = lambdaClient
        .invoke({
          FunctionName: functionName,
          LogType: 'Tail', // Wait until execution completes and return all logs
        })
        .promise();
    }
    await Promise.all(promises); - I check CloudWatch log and found this. Notice that INITis only in the first call (which indicates cold start)
Environment
- Powertools version used:0.3.3
- Packaging format (Layers, npm):npm
- AWS Lambda function runtime: n/a
- Debugging logs: n/a
Related issues, RFCs
n/a
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingcompletedThis item is complete and has been merged/shippedThis item is complete and has been merged/shippedloggerThis item relates to the Logger UtilityThis item relates to the Logger Utility

