• /
  • EnglishEspañolFrançais日本語한국어Português
  • Se connecterDémarrer

Cette traduction automatique est fournie pour votre commodité.

En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.

Créer un problème

Scala ZIO instrumentation

ZIO est une bibliothèque Scala utilisée pour exécuter des opérations asynchrones. Afin de tirer pleinement parti de la structure évaluée paresseusement de ZIO, nous proposons une API ZIO pour créer des transactions et des segments.

Installer l'API ZIO

Pour accéder à la classe API, ajoutez les informations suivantes à votre fichier de configuration Scala en fonction de la version de ZIO que vous utilisez.

Les versions de Scala prises en charge sont 2.11, 2.12 et 2.13. Scala 3.0 utilisateur peut utiliser le pot 2.13. La version minimale de Scala pour ZIO v2 est 2.12.

Important

Pour de meilleurs résultats lors de l'utilisation de l'API, assurez-vous que vous disposez de la dernière version agent Java .

  • L'API New Relic ZIO v1 nécessite l'agent Java 7.2.0 ou supérieur.
  • L'API New Relic ZIO v2 nécessite l'agent Java 8.10.0 ou supérieur.

Utiliser l'API ZIO

Vous devez d’abord créer votre déclaration d’importation, puis vous pouvez créer des transactions et des segments.

Faire une déclaration d'importation

Pour tirer parti de l'API ZIO, effectuez l'instruction d'importation suivante pour votre version :

API ZIO v1

import com.newrelic.zio.api.TraceOps

API ZIO v2

import com.newrelic.zio2.api.TraceOps

L'API pour les deux est la même, à l'exception des noms package .

Créer des transactions

Vous pouvez créer des transactions paresseusement en utilisant la méthode TraceOps.txn . Si une transaction existe déjà avant l'appel de la méthode, cette méthode fera partie de la transaction existante.

Important

Contrairement à la méthode de transaction de l'API Scala, cette méthode ne crée pas de transaction avec empressement. Au lieu de cela, vous transmettez un bloc ZIO dans lequel un effet est créé dans une instance renvoyée qui crée paresseusement un traceur de transaction. Cela se termine lorsque toutes les opérations ZIO se terminent. Par conséquent, tout code exécuté en dehors de toute instance ou opération ZIO ne sera pas capturé dans la nouvelle transaction.

Par exemple:

import com.newrelic.zio.api.TraceOps.{txn, traceFun, trace}
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.{txn, traceFun, trace}
val x = txn {
// The segment named "not-captured" will not be
// captured in the transaction because it is not ran within Zio.
trace("not-captured") {
println("hello")
}
// The segment named "trace map UIO" will be
// captured as part of the transaction because it is ran within Zio.
ZIO.succeed(1).map(traceFun("trace map UIO")(i => i + 1))
}

Créer des segments

Pour créer un segment pour un bloc de code synchrone, utilisez TraceOps.trace. Par exemple:

import com.newrelic.zio.api.TraceOps.trace
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.trace
trace("statement segment") {
val i = 1
val j = 2
println(i + j)
}
// trace can also be used as an expression
val x: Int = trace("expression segment") {
val i = 1
val j = 2
i + j
}
println(x) // 2

Important

TraceOps.trace fonctionne uniquement avec du code synchrone. Toutes les opérations effectuées via un effet ZIO, une opération ou les deux doivent plutôt utiliser TraceOps.asyncTrace (voir ci-dessous).

Si vous souhaitez créer un segment pour un bloc de code asynchrone à l'aide de ZIO, utilisez TraceOps.asyncTrace. Cela garantira que le timing du segment inclut le temps nécessaire à l'achèvement de l'effet ou de l'opération ZIO.

import zio.ZIO
import com.newrelic.zio.api.TraceOps.asyncTrace
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.asyncTrace
val x: ZIO[_, _, Int] = asyncTrace("segment name") {
ZIO.succeed(1) <*
ZIO.sleep(zio.duration.Duration.fromMillis(1.second.toMillis))
}.debug // prints 1 after the completion of the segment.

Vous pouvez également utiliser asyncTrace en Scala pour les compréhensions :

import zio.ZIO
import com.newrelic.zio.api.TraceOps.asyncTrace
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.asyncTrace
val x: ZIO[_, _, Int] = for {
one <- asyncTrace("segment one")(ZIO.succeed(1))
two <- asyncTrace("segment two")(ZIO.succeed(one + 1))
three <- asyncTrace("segment three")(ZIO.succeed(two + 1))
} yield three
val x2 = x.debug // prints 3 on completion of the segments in x

Si vous souhaitez créer un segment pour une fonction anonyme synchrone, utilisez TraceOps.traceFun. Par exemple:

import zio.ZIO
import com.newrelic.zio.api.TraceOps.asyncTraceFun
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.asyncTraceFun
val x: ZIO[_, _, Int] = ZIO.succeed(1)
.map(traceFun("statement segment")(i => i + 1))
.debug // prints 2

Si vous souhaitez créer un segment pour une fonction asynchrone qui renvoie une instance ZIO,\ utiliser TraceOps.asyncTraceFun. Cela garantira que le timing du segment inclut le temps nécessaire à la réalisation des opérations ZIO. Par exemple:

import zio.ZIO
import com.newrelic.zio.api.TraceOps.asyncTraceFun
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.asyncTraceFun
val x: ZIO[_, _, Int] = ZIO.succeed(1)
.flatMap(asyncTraceFun("statement segment")(i => ZIO.succeed(i + 1)))
.debug // prints 2 on completion of the zio operations

Plus de fonctions API

Pour en savoir plus sur l'API de l'agent Java et ses fonctionnalités, consultez l'introduction à l'API de l'agent Java.

Droits d'auteur © 2025 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.