[java] Apache Tika 와 로깅 및 모니터링

Apache Tika는 다양한 문서 형식을 추출하고 분석하기 위한 자바 라이브러리입니다. 이 라이브러리는 로그 파일, 웹 페이지, PDF 파일, 워드 문서 등 다양한 형식의 문서에서 텍스트와 메타데이터를 추출할 수 있습니다.

이번 글에서는 Apache Tika를 사용하여 문서를 추출하는 과정에서 로깅 및 모니터링을 적용하는 방법에 대해 알아보겠습니다.

로깅 설정

Apache Tika는 Jakarta Commons Logging을 사용하여 로깅을 처리합니다. 로깅 설정을 사용하면 추출 작업 중에 발생하는 문제를 추적하고 디버깅할 수 있습니다.

로깅을 사용하려면 먼저 log4j 혹은 logback 같은 로깅 프레임워크를 설정해야 합니다. 로깅 프레임워크를 설정하는 방법은 프로젝트의 필요에 맞게 다양하게 조정할 수 있습니다.

다음은 logback 로깅 프레임워크를 사용하여 Apache Tika의 로깅 설정을 하는 예제입니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 로그 출력 설정 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    
    <!-- 로그 레벨 설정 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

위의 설정 파일은 로그를 콘솔에 출력하도록 설정하고 있습니다. 필요에 따라 파일로 로그를 저장하거나 다른 앱에 로그를 전송하는 설정으로 변경할 수 있습니다.

Tika 로깅

Tika에서 로깅을 활성화하려면 TikaConfig 인스턴스를 만들 때 TikaConfig.Builder 객체를 사용하여 로깅 속성을 설정해야 합니다.

다음은 로깅을 활성화하고 로깅 레벨을 설정하는 예제입니다.

import org.apache.tika.config.TikaConfig;

public class Example {
    public static void main(String[] args) {
        TikaConfig config = new TikaConfig.Builder()
                .setLogLevel("INFO")
                .build();
                
        // Tika에서 로깅 사용
        config.getParser().setEnableLogging(true);
    }
}

위의 예제에서는 setLogLevel() 메서드를 사용하여 로깅 레벨을 지정하고 setEnableLogging() 메서드를 통해 로깅을 활성화하였습니다. 필요에 따라 로깅 레벨을 변경하거나 로깅을 비활성화할 수 있습니다.

모니터링

Apache Tika는 추출 작업에 대한 상태 및 진행률 정보를 수집하는 기능을 제공합니다. 이 정보를 사용하여 추출 작업의 성능을 분석하거나 문제를 해결할 수 있습니다.

Tika의 모니터링 기능을 사용하려면 추출 작업 중 Parser 클래스의 상태 정보에 접근해야 합니다.

다음은 추출 작업의 시작 및 완료 시점에 모니터링하는 예제입니다.

import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.ToXMLContentHandler;

public class Example {
    public static void main(String[] args) throws Exception {
        TikaConfig config = new TikaConfig();

        // 파서 생성
        Parser parser = config.getParser();

        // 모니터링을 위한 객체 생성
        MonitoringHandler handler = new MonitoringHandler();

        // 입력 파일 설정
        File file = new File("example.docx");

        // 추출 작업 시작
        try (InputStream stream = new FileInputStream(file)) {
            Metadata metadata = new Metadata();
            ParseContext context = new ParseContext();
            context.set(Metadata.class, metadata);

            parser.parse(stream, handler, metadata, context);
        }

        // 추출 작업 완료 후 상태 정보 출력
        System.out.println("Total characters: " + handler.getTotalCharacters());
        System.out.println("Total paragraphs: " + handler.getTotalParagraphs());
    }
}

위의 예제에서는 MonitoringHandler라는 사용자 정의 클래스를 생성하여 추출 작업의 상태 정보를 저장합니다. 추출 작업이 완료되면 handler.getTotalCharacters()handler.getTotalParagraphs() 메서드를 사용하여 총 문자 수와 단락 수를 출력합니다.

이와 같이 Apache Tika를 사용하면 로깅과 모니터링을 통해 문서 추출 작업을 보다 효율적으로 관리할 수 있습니다.

참고 자료