Skip to content

Java annotation library to trace and time your method executions, written using Micronaut

License

Notifications You must be signed in to change notification settings

sgoudham/micronaut-trace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

micronaut-trace

Java annotation library to trace and time your method executions, written using Micronaut.

Installation

Be sure to replace the VERSION key below with the version shown above!

Maven

<!-- https://mvnrepository.com/artifact/me.goudham/micronaut-trace -->

<dependency>
    <groupId>me.goudham</groupId>
    <artifactId>micronaut-trace</artifactId>
    <version>VERSION</version>
    <!-- If you want the .jar with all dependencies! WARNING: This might fix OR introduce various problems with Micronaut
    <classifier>shaded</classifier>
    -->
</dependency>

Gradle

repositories {
    mavenCentral()
}

dependencies {
    // https://mvnrepository.com/artifact/me.goudham/micronaut-trace
    implementation 'me.goudham:micronaut-trace:VERSION'
    
    // If you want the .jar with all dependencies! WARNING: This might fix OR introduce various problems with Micronaut
    implementation 'me.goudham:micronaut-trace:VERSION:shaded'
}

Binaries

If you choose not to use a build tool, pre-built .jar files are available with every single release.

Usage

With the following example code:

PrintService.java

package com.example;

import jakarta.inject.Singleton;
import me.goudham.micronaut.trace.annotation.Time;
import me.goudham.micronaut.trace.annotation.Trace;

import static java.lang.Thread.sleep;

@Singleton
public class PrintService {
    public PrintService() {
    }

    @Trace
    @Time
    public void printHello() throws InterruptedException {
        System.out.println("hello");
        printAfter5Seconds("hi");
    }

    @Trace
    @Time
    public void printAfter5Seconds(String message) throws InterruptedException {
        sleep(5000);
        System.out.println(message);
    }
}

Application.java

package com.example;

import io.micronaut.context.ApplicationContext;

public class Application {
    public static void main(String[] args) throws InterruptedException {
        ApplicationContext applicationContext = ApplicationContext.run();
        PrintService printService = applicationContext.getBean(PrintService.class);
        printService.printHello();
    }
}

The output would look like:

08:09:04.577 [main] TRACE com.example.PrintService - [ENTERING]: printHello()
hello
08:09:04.577 [main] TRACE i.m.aop.chain.InterceptorChain - Intercepted method [void printHiAfter5Seconds(String message)] invocation on target: com.example.$PrintService$Definition$Intercepted@4ef74c30
08:09:04.577 [main] TRACE i.m.aop.chain.InterceptorChain - Proceeded to next interceptor [me.goudham.micronaut.trace.shared.TimeInterpreter@2438dcd] in chain for method invocation: void printHiAfter5Seconds(String message)
08:09:04.577 [main] TRACE i.m.aop.chain.InterceptorChain - Proceeded to next interceptor [me.goudham.micronaut.trace.shared.TraceInterpreter@41f69e84] in chain for method invocation: void printHiAfter5Seconds(String message)
08:09:04.581 [main] TRACE com.example.PrintService - [ENTERING]: printHiAfter5Seconds(java.lang.String message)
hi
08:09:09.582 [main] TRACE com.example.PrintService - [EXITING]: printHiAfter5Seconds(java.lang.String message)
08:09:09.582 [main] TRACE com.example.PrintService - [EXECUTION_TIME]: Elapsed execution time for printHiAfter5Seconds(java.lang.String message) is 5004 milliseconds
08:09:09.582 [main] TRACE com.example.PrintService - [EXITING]: printHello()
08:09:09.582 [main] TRACE com.example.PrintService - [EXECUTION_TIME]: Elapsed execution time for printHello() is 5005 milliseconds

Contributing

Thank you for your interest in Contributing! See the following text for more information on how to build and test the project.

Development

This project was not intended to be feature-rich but rather a project to play about with the Micronaut framework and learn more about annotation processing, defining custom annotations and deploying a Micronaut library.

It is highly recommended that you are familiar with the framework before trying to understand the code. You can find the latest documentation here.

Tooling

This project uses the build tool Maven from the java ecosystem. It is highly recommended to develop using Intellij IDEA as it will allow you to take advantage of its integration with maven tooling.

A great 5-minute introduction to Maven can be found here.

Building

The project can be built with the following series of commands:

  1. Clone Repository

    git clone https://github.com/sgoudham/micronaut-trace.git
  2. Enable Annotation Processing

  3. Build & Package

    ./mvnw clean package
  4. Run Tests

    ./mvnw test

License

MIT