ch.qos.logback
logback-classic
diff --git a/src/main/java/me/goudham/trace/Trace.java b/src/main/java/me/goudham/trace/Trace.java
deleted file mode 100644
index c5d91d0..0000000
--- a/src/main/java/me/goudham/trace/Trace.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package me.goudham.trace;
-
-import io.micronaut.aop.Around;
-import jakarta.inject.Qualifier;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Qualifier
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Around
-public @interface Trace {
-}
\ No newline at end of file
diff --git a/src/main/java/me/goudham/trace/annotation/Time.java b/src/main/java/me/goudham/trace/annotation/Time.java
new file mode 100644
index 0000000..87c795e
--- /dev/null
+++ b/src/main/java/me/goudham/trace/annotation/Time.java
@@ -0,0 +1,26 @@
+package me.goudham.trace.annotation;
+
+import io.micronaut.aop.Around;
+import jakarta.inject.Qualifier;
+import me.goudham.trace.shared.TimeInterpreter;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * {@code @Time} calculates the execution time of the
+ * annotated method and logs it.
+ *
+ * It is important to note that these logs will only be seen if {@link System.Logger}
+ * is configured to log at {@link System.Logger.Level#TRACE}
+ *
+ * @see TimeInterpreter
+ */
+@Qualifier
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Around
+public @interface Time {
+}
\ No newline at end of file
diff --git a/src/main/java/me/goudham/trace/annotation/Trace.java b/src/main/java/me/goudham/trace/annotation/Trace.java
new file mode 100644
index 0000000..38e4e4a
--- /dev/null
+++ b/src/main/java/me/goudham/trace/annotation/Trace.java
@@ -0,0 +1,26 @@
+package me.goudham.trace.annotation;
+
+import io.micronaut.aop.Around;
+import jakarta.inject.Qualifier;
+import me.goudham.trace.shared.TraceInterpreter;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * {@code @Trace} indicates that the current method will be monitored to allow
+ * logging when the method was entered and exited.
+ *
+ * It is important to note that these logs will only be seen if {@link System.Logger}
+ * is configured to log at {@link System.Logger.Level#TRACE}
+ *
+ * @see TraceInterpreter
+ */
+@Qualifier
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Around
+public @interface Trace {
+}
\ No newline at end of file
diff --git a/src/main/java/me/goudham/trace/domain/LogType.java b/src/main/java/me/goudham/trace/domain/LogType.java
new file mode 100644
index 0000000..d11f0c8
--- /dev/null
+++ b/src/main/java/me/goudham/trace/domain/LogType.java
@@ -0,0 +1,19 @@
+package me.goudham.trace.domain;
+
+import me.goudham.trace.shared.TimeInterpreter;
+import me.goudham.trace.shared.TraceInterpreter;
+import me.goudham.trace.service.LoggingService;
+
+/**
+ * Represents each type that's used for logging
+ *
+ * @see LoggingService
+ * @see TraceInterpreter
+ * @see TimeInterpreter
+ */
+public enum LogType {
+ ENTERING,
+ EXITING,
+ ERROR,
+ EXECUTION_TIME
+}
\ No newline at end of file
diff --git a/src/main/java/me/goudham/trace/interceptor/TraceInterpreter.java b/src/main/java/me/goudham/trace/interceptor/TraceInterpreter.java
deleted file mode 100644
index dde0114..0000000
--- a/src/main/java/me/goudham/trace/interceptor/TraceInterpreter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package me.goudham.trace.interceptor;
-
-import io.micronaut.aop.InterceptorBean;
-import io.micronaut.aop.MethodInterceptor;
-import io.micronaut.aop.MethodInvocationContext;
-import jakarta.inject.Singleton;
-import me.goudham.trace.Trace;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Arrays;
-import java.util.stream.Collectors;
-
-@Singleton
-@InterceptorBean(Trace.class)
-public class TraceInterpreter implements MethodInterceptor