BE/Kafka

Kafka를 통한 Log 출력

YoungSooSoo 2023. 4. 18. 16:49

Spring Boot Application의 로그 기록

#application.yml
#카프카 서버 설정
spring:
  kafka:
    bootstrap-servers: localhost:9092

#톰캣 로그 설정
server:
  tomcat:
    accesslog:
      enabled: true
      directory: logs
      suffix: .log
      prefix: access_log
      file-date-format: .yyyy-MM-dd
      pattern: '%{yyyy-MM-dd HH:mm:ss}t %s %r %{User-Agent}i %{Referer}i %a %b'
    basedir: .
  port: 9001
// build.gradle에 추가
implementation 'com.github.danielwegener:logback-kafka-appender:0.1.0'
// logback.xml
<configuration>
    <appender name="LOG-KAFKA"
              class="com.github.danielwegener.logback.kafka.KafkaAppender">
        <encoder
                class="com.github.danielwegener.logback.kafka.encoding.LayoutKafkaMessageEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%date - %-5p %t %-25logger{5} %F:%L %m%n</pattern>
            </layout>
        </encoder>

        <topic>test-topic</topic>

        <keyingStrategy
                class="com.github.danielwegener.logback.kafka.keying.RoundRobinKeyingStrategy"/>
        <deliveryStrategy
                class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/>

        <producerConfig>retries=1</producerConfig>
        <producerConfig>bootstrap.servers=localhost:9092</producerConfig>
        <producerConfig>compression.type=snappy</producerConfig>
        <producerConfig>max.block.ms=1000</producerConfig>

    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date - %-5p %t %-25logger{5} %F:%L %m%n</pattern>
        </encoder>
    </appender>

    <logger name="kafka-logger" level="INFO" additivity="false">
        <appender-ref ref="LOG-KAFKA"/>
        <appender-ref ref="STDOUT" />
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

// Controller
// Controller 클래스를 추가하고 요청에 따른 로그 기록을 위한 메서드를 생성
@RestController
@Slf4j(topic = "kafka-logger")
public class LogController {

    @GetMapping("/hello/{name}")
    public String sayHello(@PathVariable String name){
log.info("hello~!@");
        return "Hello " + name;
    }

    @GetMapping("/goodbye/{name}")
    public String sayGoodbye(@PathVariable String name){
log.info("goodbye~!@");
        return "Good Bye " + name;
    }
}
  1. 카프카에서 토픽 확인
    • 터미널을 실행한 후 카프카에 접속: docker exec -it 컨테이너이름 /bin/bash
    • 전송된 토픽 확인: kafka-console-consumer.sh --topic 토픽이름 --bootstrap-server 서버경로 --from-beginning
    •