로그 토픽으로 디버깅
로그 토픽으로 디버깅 (Debug with Log Topic)
함수 안에서 생성한 로그를 별도 토픽으로 보내고, 그 토픽을 구독해 로그를 확인할 방법이 있어요. 이렇게 하면 함수 로그를 실시간으로 관찰하며 디버깅할 수 있어요. 이 문서에서는 log topic을 지정하고 소비하는 방법을 안내해요.
출처: 문서
본문
Pulsar Functions를 사용할 때, 함수에 미리 정의된 로그를 지정된 로그 토픽으로 생성하고, 소비자를 구성해 로그 토픽에서 메시지를 소비할 수 있어요.
예를 들어 다음 함수는 들어오는 문자열에 danger라는 단어가 포함되었는지 여부에 따라 WARNING 수준 또는 INFO 수준 로그를 기록해요.
import org.apache.pulsar.functions.api.Context;
import org.apache.pulsar.functions.api.Function;
import org.slf4j.Logger;
public class LoggingFunction implements Function<String, Void> {
@Override
public void apply(String input, Context context) {
Logger LOG = context.getLogger();
String messageId = new String(context.getMessageId());
if (input.contains("danger")) {
LOG.warn("A warning was received in message {}", messageId);
} else {
LOG.info("Message {} received\nContent: {}", messageId, input);
}
return null;
}
}
예시에서 볼 수 있듯이 context.getLogger()로 로거를 가져와 slf4j의 LOG 변수에 할당할 수 있어요. 그래서 함수 안에서 LOG 변수로 원하는 로그를 정의할 수 있어요.
한편, 로그가 생성될 토픽을 지정해야 해요. 다음은 예시예요.
bin/pulsar-admin functions create \
--log-topic persistent://public/default/logging-function-logs \
# Other function configs
로그 토픽에 게시된 메시지는 몇 가지 속성을 포함해요:
- loglevel: 로그 메시지의 수준.
- fqn: 이 로그 메시지를 푸시하는 함수의 완전 정규 함수 이름.
- instance: 이 로그 메시지를 푸시하는 함수 인스턴스의 ID.
더 알아보기 (Learn more)
- Pulsar Functions 디버깅 개요 — 다른 디버깅 방법을 확인해요.
- Functions CLI — log-topic 옵션을 포함한 함수 구성 필드를 봐요.
- 메시징 개념 — 토픽과 소비의 기본을 익혀요.