[Akka] Log

smlee·2023년 10월 11일
0

Akka

목록 보기
30/50
post-thumbnail

서버 개발을 하며 가장 중요한 것들 중 하나는 로그이다. 로그를 확인하며 잘 동작하고 있는지 확인하는 것이 좋다. 하지만, 로그를 남발하게 된다면 성능 저하와 과도한 로그 사이에서 중요한 로그를 찾기 힘들 수 있다는 단점이 있다.

이번 포스트에서는 로그를 설정하기 위한 방법과 로그 레벨에 대해 정리하려고 한다.

로그 이용하기

비동기적으로 로그를 이용하는 방법은 ActorLogging trait를 상속하는 방법, 그리고 akka.event.Logging 내부의 로깅 객체를 사용하는 방법이 있다. 물론, Slf4j를 사용하는 방법도 있지만 이 방법은 이 포스팅에서는 생략할 것이다.

(1) ActorLogging

ActorLogging은 trait를 선언하거나 Actor를 선언할 때 상속해주면 된다.

import akka.actor.ActorLogging

class SimpleActor extends Actor with ActorLogging {
	override def receive:Receive = {
    	case message => log.info(message.toString)
    }
}

위와 같이 가장 간단한 형태로 예제 코드를 작성하였다. akka.actor.ActorLogging 패키지를 임포트 시킨 후 log.로깅레벨 형태로 메서드를 작성하면 설정한 로깅레벨 수준의 로그르를 출력할 수 있다. 위의 예제에서는 log.info를 사용했는데, 이를 통해 info 레벨의 로깅을 출력한다는 것을 알 수 있다. info 뿐만 아니라 로깅 레벨에 맞게 로그를 출력할 수 있다.

ActorLogging을 사용하면 stdout으로 출력된다.

application.conf 파일에 커스텀 Config를 설정해주면 로깅 레벨이나 로거를 설정할 수 있다.

로깅 레벨
가장 많이 사용하는 로깅 레벨에는 Debug, Info, Warning, Error가 있다.
1. Debug : 가장 상세한 로깅(verbose)
2. Info : 가장 많이 사용하는 로깅 레벨
3. Warning : message lost와 같은 상황이 발생하였을 시 남겨지는 로그
4. Error : Crash와 같이 크리티컬한 상황이 발생할 경우

(2) 내부로깅 akka.event.Logging 사용

import akka.event.Logging

class SimpleActor extends Actor {
	
    val log = Logging(context.system, this)
    
    override def receive: Receive = {
    	case message = log.info(message.toString)
    }
}

내부 로깅을 사용하기 위해서는 akka.event.Logging을 Import 시킨 후 해당 로깅객체를 사용한다. 인자로 ActorSystem이 필요하며, context.system, this를 넣으면 된다. 이 역시 stdout으로 출력된다.

0개의 댓글