ZIOAspect.annotated
를 사용하면 effect 에 몇 가지 컨텍스트 정보(ex. correlation_id)를 주석으로 달 수 있습니다.
이 정보는 동일한 부모 fiber 에서 생성된 모든 fiber 에 전파되는 FiberRef
내부에 저장됩니다.
각 fiber 에는 고유한 어노테이션 set 가 있습니다.
Fiber 내부에서 로깅할 때 로깅 서비스는 파이버의 특정 어노테이션을 사용하여 로그 메시지를 생성합니다.
import zio._
object MainApp extends ZIOAppDefault {
def handleRequest(request: String) =
for {
_ <- ZIO.log(s"Received request.")
_ <- ZIO.unit // do something with the request
_ <- ZIO.log(s"Finished processing request")
} yield ()
def run =
for {
_ <- ZIO.log("Hello World!")
_ <- ZIO.foreachParDiscard(List(("req1", "1"), ("req2", "2"), ("req3", "3"))){ case (req, id) =>
handleRequest(req) @@ ZIOAspect.annotated("correlation_id", id)
}
_ <- ZIO.log("Goodbye!")
} yield ()
}
위 코드를 실행하면 결과 로그는 아래와 같이 출력됩니다.
message="Hello World!"
message="Received request." correlation_id=2
message="Received request." correlation_id=1
message="Received request." correlation_id=3
message="Finished processing request." correlation_id=3
message="Finished processing request." correlation_id=1
message="Finished processing request." correlation_id=2
message="Goodbye!"
요약하자면, ZIOAspect.annotated
는 로그 뒤에 부가적으로 출력 될 정보를 설정해 둘 수 있는 기능입니다.
ref)
ZIO Doc