[ZIO] ZIOAspect.annotated

Sangwoo Park·2023년 8월 26일
0

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

profile
going up

0개의 댓글