[{"data":1,"prerenderedAt":61},["ShallowReactive",2],{"snippet-tools-powertools-tracing":3},{"id":4,"title":5,"contributors":6,"description":9,"extension":10,"gitHub":11,"introBox":14,"languages":18,"meta":21,"resources":22,"services":30,"snippets":32,"stem":57,"tags":58,"type":59,"__hash__":60},"snippets\u002Fsnippets\u002Ftools-powertools-tracing.json","Standardize tracing with AWS Lambda Powertools",[7,8],"content\u002Fcontributors\u002Fjames-eastham.json","content\u002Fcontributors\u002Frahul-popat.json","Standardize your application tracing with Powertools.","json",{"template":12},{"repoURL":13},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-snippets\u002Ftree\u002Fmain\u002Ftools-powertools-tracing",{"headline":15,"text":16},"How it works",[17],"Tracing provides an opinionated wrapper around the AWS X-Ray SDK for .NET.",[19,20],".NET","Java",{},{"bullets":23},[24,27],{"text":25,"link":26},"Tracing Homepage","https:\u002F\u002Fawslabs.github.io\u002Faws-lambda-powertools-dotnet\u002Fcore\u002Ftracing\u002F",{"text":28,"link":29},"AWS Lambda PowerTools Repository","https:\u002F\u002Fgithub.com\u002Fawslabs\u002Faws-lambda-powertools-dotnet\u002Ftree\u002Fmain\u002Fexamples",[31],"lambda",[33],{"title":34,"codeTabs":35},"Runtimes",[36,47],{"id":19,"title":37,"snippets":38},"Using Powertools Tracing with .NET:",[39,43],{"title":40,"language":41,"code":42},"Install the library in your project:","Bash","dotnet add package AWS.Lambda.Powertools.Tracing --prerelease",{"description":44,"language":45,"code":46},"The Logging functionality requires an environment variables to be set; POWERTOOLS_SERVICE_NAME.","dotnet","﻿using Amazon.Lambda.Core;\nusing AWS.Lambda.Powertools.Tracing;\n\n[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]\n\nnamespace Powertools.Trace\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\n        [Tracing]\n        public void Handler(object request, ILambdaContext context)\n        {\n            Tracing.AddAnnotation(\"annotation\", \"value\");\n            Tracing.AddMetadata(\"metadata\", \"sample\");\n\n            Tracing.WithSubsegment(\"loggingResponse\", (subsegment) =&#62; {\n                \u002F\u002F Some business logic\n            });\n        }\n    }\n}",{"id":20,"title":48,"snippets":49},"Using Powertools Tracing with Java:",[50,54],{"title":51,"language":52,"code":53},"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":55,"language":52,"code":56},"Powertools tracing is an opinionated thin wrapper for AWS X-Ray Java SDK a provides functionality to reduce the overhead of performing common tracing tasks.","package helloworld;\n\nimport 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 com.amazonaws.xray.AWSXRay;\nimport com.amazonaws.xray.entities.Entity;\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport software.amazon.lambda.powertools.tracing.CaptureMode;\nimport software.amazon.lambda.powertools.tracing.TracingUtils;\nimport software.amazon.lambda.powertools.tracing.Tracing;\nimport static software.amazon.lambda.powertools.tracing.TracingUtils.putMetadata;\nimport static software.amazon.lambda.powertools.tracing.TracingUtils.withEntitySubsegment;\n\n\u002F**\n * Handler for requests to Lambda function.\n *\u002F\npublic class TracingHandler implements RequestHandler&#60;APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent&#62; {\n    private final static Logger log = LogManager.getLogger(TracingHandler.class);\n\n    @Tracing(captureMode = CaptureMode.RESPONSE_AND_ERROR)\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            TracingUtils.putAnnotation(\"Test\", \"New\");\n            String output = String.format(\"{ \\\"message\\\": \\\"hello world\\\", \\\"location\\\": \\\"%s\\\" }\", pageContents);\n            log.info(\"After 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    @Tracing(namespace = \"getPageContents\", captureMode = CaptureMode.DISABLED)\n    private String getPageContents(String address) throws IOException {\n        URL url = new URL(address);\n        TracingUtils.putMetadata(\"getPageContents\", address);\n        try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) {\n            return br.lines().collect(Collectors.joining(System.lineSeparator()));\n        }\n    }\n}\n","snippets\u002Ftools-powertools-tracing",[],"Tools","SR7H7Dz_qRe0arZgh4qLI5Zbz81KrWof5P3cStAhJuw",1790801583541]