Add Sleuth to your classpath:

Maven

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${release.train.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
    </dependencies>

Gradle

    buildscript {
        dependencies {
            classpath "io.spring.gradle:dependency-management-plugin:0.5.2.RELEASE"
        }
    }

    apply plugin: "io.spring.dependency-management"

    dependencyManagement {
         imports {
              mavenBom "org.springframework.cloud:spring-cloud-dependencies:${releaseTrainVersion}"
         }
    }
    dependencies {
        compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
    }

As long as Spring Cloud Sleuth is on the classpath any Spring Boot application will generate trace data:

    @SpringBootApplication
    @RestController
    public class Application {

      private static Logger log = LoggerFactory.getLogger(DemoController.class);

      @RequestMapping("/")
      public String home() {
        log.info("Handling home");
        return "Hello World";
      }

      public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
      }

    }

Run this app and then hit the home page. You will see traceId and spanId populated in the logs. If this app calls out to another one (e.g. with `RestTemplate`) it will send the trace data in headers and if the receiver is another Sleuth app you will see the trace continue there.

- Instead of logging the request in the handler explicitly, you could set `logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG`

- Sleuth defaults to a rate limited sampler. That means that it will sample up to 1000 transactions per second.

- Set `spring.application.name=bar` (for instance) to see the service name as well as the trace and span ids.