aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego <diegolparra@gmail.com>2016-04-22 00:40:34 -0300
committerDiego <diegolparra@gmail.com>2016-04-22 00:40:34 -0300
commita96d9e0ac5fafd29e2bfc2e4ae10a673690f1e42 (patch)
tree75eeeb4b55728ce3a27a247ef3aac93bc7932a46
parent37a47488359758d96d73c592fe962a81bf856201 (diff)
downloadKamon-a96d9e0ac5fafd29e2bfc2e4ae10a673690f1e42.tar.gz
Kamon-a96d9e0ac5fafd29e2bfc2e4ae10a673690f1e42.tar.bz2
Kamon-a96d9e0ac5fafd29e2bfc2e4ae10a673690f1e42.zip
! kamon-autoweave: catch all exceptions thrown for AgentLoader and closes #344
-rw-r--r--kamon-autoweave/src/main/scala/kamon/autoweave/Autoweave.scala12
-rw-r--r--kamon-core/src/main/scala/kamon/Kamon.scala17
2 files changed, 20 insertions, 9 deletions
diff --git a/kamon-autoweave/src/main/scala/kamon/autoweave/Autoweave.scala b/kamon-autoweave/src/main/scala/kamon/autoweave/Autoweave.scala
index 58111b48..9c349c9e 100644
--- a/kamon-autoweave/src/main/scala/kamon/autoweave/Autoweave.scala
+++ b/kamon-autoweave/src/main/scala/kamon/autoweave/Autoweave.scala
@@ -1,5 +1,5 @@
/* =========================================================================================
- * Copyright © 2013-2015 the kamon project <http://kamon.io/>
+ * Copyright © 2013-2016 the kamon project <http://kamon.io/>
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License at
@@ -19,13 +19,15 @@ import kamon.Kamon
import kamon.autoweave.loader.AgentLoader
import org.aspectj.weaver.loadtime.Agent
-object Autoweave {
+class Autoweave {
val config = Kamon.config.getConfig("kamon.autowave.options")
val verbose = config.getBoolean("verbose")
val showWeaveInfo = config.getBoolean("showWeaveInfo")
- System.setProperty("aj.weaving.verbose", verbose.toString)
- System.setProperty("org.aspectj.weaver.showWeaveInfo", showWeaveInfo.toString)
+ def attach(): Unit = {
+ System.setProperty("aj.weaving.verbose", verbose.toString)
+ System.setProperty("org.aspectj.weaver.showWeaveInfo", showWeaveInfo.toString)
- AgentLoader.attachAgentToJVM(classOf[Agent])
+ AgentLoader.attachAgentToJVM(classOf[Agent])
+ }
}
diff --git a/kamon-core/src/main/scala/kamon/Kamon.scala b/kamon-core/src/main/scala/kamon/Kamon.scala
index b5ea0c28..9f6e58ee 100644
--- a/kamon-core/src/main/scala/kamon/Kamon.scala
+++ b/kamon-core/src/main/scala/kamon/Kamon.scala
@@ -16,12 +16,14 @@ package kamon
import _root_.akka.actor
import _root_.akka.actor._
-import _root_.scala.util.{ Success, Failure, Try }
import com.typesafe.config.{ Config, ConfigFactory }
import kamon.metric._
import kamon.trace.TracerModuleImpl
import kamon.util.logger.LazyLogger
+import _root_.scala.util.control.NonFatal
+import _root_.scala.util.{ Failure, Success, Try }
+
object Kamon {
private val log = LazyLogger("Kamon")
@@ -61,13 +63,20 @@ object Kamon {
private def tryLoadAutoweaveModule(): Unit = {
val color = (msg: String) ⇒ s"""\u001B[32m${msg}\u001B[0m"""
- log.info("Trying to load kamon-autoweave...")
+ Try {
+
+ log.info("Trying to load kamon-autoweave...")
+
+ val autoweave = Class.forName("kamon.autoweave.Autoweave")
+ val instance = autoweave.newInstance()
+
+ autoweave.getDeclaredMethod("attach").invoke(instance)
- Try(Class.forName("kamon.autoweave.Autoweave$")) match {
+ } match {
case Success(_) ⇒
log.info(color("Kamon-autoweave has been successfully loaded."))
log.info(color("The AspectJ loadtime weaving agent is now attached to the JVM (you don't need to use -javaagent)."))
- case Failure(reason) ⇒ log.debug(s"Kamon-autoweave failed to load. Reason: we have not found the ${reason.getMessage} class in the classpath.")
+ case Failure(NonFatal(reason)) ⇒ log.debug(s"Kamon-autoweave failed to load. Reason: ${reason.getCause}.")
}
}