[{"data":1,"prerenderedAt":76},["ShallowReactive",2],{"snippet-tools-powertools-logger":3},{"id":4,"title":5,"contributors":6,"description":10,"extension":11,"gitHub":12,"introBox":15,"languages":19,"meta":23,"resources":24,"services":35,"snippets":37,"stem":72,"tags":73,"type":74,"__hash__":75},"snippets\u002Fsnippets\u002Ftools-powertools-logger.json","Standardize logs with AWS Lambda Powertools",[7,8,9],"content\u002Fcontributors\u002Fdavid-boyne.json","content\u002Fcontributors\u002Fjames-eastham.json","content\u002Fcontributors\u002Frahul-popat.json","Standardize your function logs with Powertools.","json",{"template":13},{"repoURL":14},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-snippets\u002Ftree\u002Fmain\u002Ftools-powertools-logger",{"headline":16,"text":17},"How it works",[18],"Cloudwatch Log Insights snippet that returns logs that are not exceptions",[20,21,22],"TypeScript",".NET","Java",{},{"bullets":25},[26,29,32],{"text":27,"link":28},"AWS Lambda PowerTools Repository","https:\u002F\u002Fgithub.com\u002Fawslabs\u002Faws-lambda-powertools-typescript\u002Ftree\u002Fmain\u002Fexamples",{"text":30,"link":31},"Watch Serverless Office Hours: AWS Lambda - Lambda Powertools","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=tr7DZxn3qag&t=2038s",{"text":33,"link":34},"AWS Lambda PowerTools Homepage","https:\u002F\u002Fawslabs.github.io\u002Faws-lambda-powertools-java",[36],"lambda",[38],{"title":39,"codeTabs":40},"Runtimes",[41,53,62],{"id":42,"title":43,"snippets":44},"Node.js","Using Powertools Logger with TypeScript:",[45,50],{"title":46,"description":47,"language":48,"code":49},"Install the library in your project:","The Logger utility must always be instantiated outside the Lambda handler. By doing this, subsequent invocations processed by the same instance of your function can reuse these resources. This saves cost by reducing function run time. In addition, Logger can keep track of a cold start and inject the appropriate fields into logs.","Bash","npm install @aws-lambda-powertools\u002Flogger",{"description":47,"language":51,"code":52},"js","import { Logger, injectLambdaContext } from '@aws-lambda-powertools\u002Flogger';\nimport middy from '@middy\u002Fcore';\n\nconst logger = new Logger({\n  logLevel: 'INFO',\n  serviceName: 'shopping-cart-api',\n});\n\nconst lambdaHandler = async (): Promise&#60;void&#62; =&#62; {\n  logger.info('This is an INFO log with some context');\n};\n\nexport const handler = middy(lambdaHandler).use(injectLambdaContext(logger));\n",{"id":21,"title":54,"snippets":55},"Using Powertools Logging with .NET:",[56,58],{"title":46,"language":48,"code":57},"dotnet add package AWS.Lambda.Powertools.Logging --prerelease",{"description":59,"language":60,"code":61},"The Logging functionality requires an environment variables to be set; POWERTOOLS_SERVICE_NAME.","dotnet","﻿using Amazon.Lambda.Core;\nusing AWS.Lambda.Powertools.Logging;\n\n[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]\n\nnamespace Powertools.Logging\n{\n    public class Function\n    {\n        \u002F\u002F Powertools Logger requires an environment variables against your function\n        \u002F\u002F POWERTOOLS_SERVICE_NAME\n        [Logging(LogEvent = true)]\n        public void Handler(object request, ILambdaContext context)\n        {\n            try\n            {\n                var requestContextRequestId = Guid.NewGuid().ToString();\n\n                var lookupInfo = new Dictionary&#60;string, object&#62;()\n                {\n                    {\"LookupInfo\", new Dictionary&#60;string, object&#62;{{ \"LookupId\", requestContextRequestId }}}\n                };\n\n                \u002F\u002F Append custom keys to the structured logs\n                Logger.AppendKeys(lookupInfo);\n\n                Logger.LogInformation(\"Getting ip address from external service\");\n            }\n            catch (Exception ex)\n            {\n                Logger.LogError(ex, \"Failure processing request\");\n            }\n        }\n    }\n}",{"id":22,"title":63,"snippets":64},"Using Powertools Logging with Java:",[65,69],{"title":66,"language":67,"code":68},"Add maven or gradle dependencies to your project:","java","Add maven or gradle dependencies to your project as mentioned here - https:\u002F\u002Fawslabs.github.io\u002Faws-lambda-powertools-java",{"description":70,"language":67,"code":71},"Lambda Powertools logging provides an opinionated logger with output structured as JSON.","import java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.net.URL;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.stream.Collectors;\n\nimport com.amazonaws.services.lambda.runtime.Context;\nimport com.amazonaws.services.lambda.runtime.RequestHandler;\nimport com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;\nimport com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport software.amazon.lambda.powertools.logging.LoggingUtils;\nimport software.amazon.lambda.powertools.logging.Logging;\n\npublic class LoggingHandler implements RequestHandler&#60;APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent&#62; {\n    private final static Logger log = LogManager.getLogger(LoggingHandler.class);\n\n    @Logging(logEvent = true)\n    public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) {\n        Map&#60;String, String&#62; headers = new HashMap&#60;&#62;();\n\n        headers.put(\"Content-Type\", \"application\u002Fjson\");\n        headers.put(\"X-Custom-Header\", \"application\u002Fjson\");\n\n        APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent()\n                .withHeaders(headers);\n        try {\n            final String pageContents = this.getPageContents(\"https:\u002F\u002Fcheckip.amazonaws.com\");\n            log.info(pageContents);\n            String output = String.format(\"{ \\\"message\\\": \\\"hello world\\\", \\\"location\\\": \\\"%s\\\" }\", pageContents);\n            log.info(output);\n            return response\n                    .withStatusCode(200)\n                    .withBody(output);\n        } catch (IOException | InterruptedException e) {\n            return response\n                    .withBody(\"{}\")\n                    .withStatusCode(500);\n        }\n    }\n\n    private String getPageContents(String address) throws IOException {\n        URL url = new URL(address);\n        try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) {\n            return br.lines().collect(Collectors.joining(System.lineSeparator()));\n        }\n    }\n}\n\n","snippets\u002Ftools-powertools-logger",[],"Tools","jFvlxCTpKDOZ0pR1qSmN6OVfawodqcN7Dp5kuKS4Ypc",1790591696463]