1. 소개

색상을 추가하면 로깅을 훨씬 쉽게 읽을 수 있습니다.

이 기사에서는 Visual Studio Code 터미널, Linux 및 Windows 명령 프롬프트와 같은 콘솔의 로그에 색상을 추가하는 방법을 살펴보겠습니다.

시작하기 전에 불행히도 Eclipse IDE 콘솔에는 제한된 색상 설정만 있다는 점에 유의합시다. Eclipse IDE 내의 콘솔은 Java 코드에 의해 결정된 색상을 지원하지 않으므로 이 기사에 제공된 솔루션은 Eclipse IDE 콘솔 내에서 작동하지 않습니다.

2. ANSI 코드를 사용하여 로그에 색상을 지정하는 방법

다채로운 로깅을 달성하는 가장 쉬운 방법은 ANSI 코드라고도 하는 ANSI 이스케이프 시퀀스 를 사용하는 것입니다.

ANSI 코드는 일부 터미널이 명령으로 해석하는 특수한 바이트 시퀀스입니다.

ANSI 코드를 로그아웃합시다:

System.out.println("Here's some text");
System.out.println("\u001B[31m" + "and now the text is red");

출력에서 ANSI 코드가 인쇄되지 않고 글꼴 색상이 빨간색으로 변경된 것을 볼 수 있습니다.

여기에 일부 텍스트
 가 있으며 이제 텍스트가 빨간색입니다.

로깅이 끝나면 글꼴 색상을 재설정해야 합니다.

다행히도 이것은 쉽습니다. ANSI 재설정 명령인 \u001B[31m 을 간단히 인쇄할 수 있습니다 .

reset 명령은 콘솔을 기본 색상으로 재설정합니다. 이것은 반드시 검은색일 필요는 없으며 흰색이거나 콘솔에서 구성한 다른 색상일 수 있습니다. 예를 들어:

System.out.println("Here's some text");
System.out.println("\u001B[31m" + "and now the text is red" + "\u001B[0m");
System.out.println("and now back to the default");

출력을 제공합니다:

다음은 일부 텍스트
 입니다. 이제 텍스트가 빨간색 
이고 이제 기본값으로 돌아갑니다.

대부분의 로깅 라이브러리는 ANSI 코드를 따르므로 다채로운 로거를 구축할 수 있습니다.

예를 들어, 서로 다른 로그 수준에 대해 서로 다른 색상을 사용하는 로거를 빠르게 구성할 수 있습니다.

public class ColorLogger {
    
    private static final Logger LOGGER = LoggerFactory.getLogger(ColorLogger.class);
    
    public void logDebug(String logging) {
        LOGGER.debug("\u001B[34m" + logging + "\u001B[0m");
    }
    public void logInfo(String logging) {
        LOGGER.info("\u001B[32m" + logging + "\u001B[0m");
    }
    
    public void logError(String logging) {
        LOGGER.error("\u001B[31m" + logging + "\u001B[0m");
    }
}

이것을 사용하여 콘솔에 일부 색상을 인쇄해 보겠습니다.

ColorLogger colorLogger = new ColorLogger();
colorLogger.logDebug("Some debug logging");
colorLogger.logInfo("Some info logging");
colorLogger.logError("Some error logging");
[main] DEBUG com.baeldung.color.ColorLogger - 일부 디버그 로깅 
[main] INFO com.baeldung.color.ColorLogger - 일부 정보 로깅 
[main] ERROR com.baeldung.color.ColorLogger - 일부 오류 로깅

각 로그 수준의 색상이 다르므로 로그를 훨씬 더 쉽게 읽을 수 있습니다.

마지막으로 ANSI 코드를 사용하여 글꼴 색상보다 훨씬 더 많은 것을 제어할 수 있습니다. 배경 색상과 글꼴 두께, 스타일을 제어할 수 있습니다. 예제 프로젝트에는 이러한 ANSI 코드가 선택되어 있습니다.

3. Windows 명령 프롬프트에서 로그 색상 지정 방법

불행히도 일부 터미널은 ANSI 코드를 지원하지 않습니다. 한 가지 주요 예는 Windows 명령 프롬프트이며 위의 내용은 작동하지 않습니다. 따라서 보다 정교한 솔루션이 필요합니다.

그러나 직접 구현하는 대신 JANSI 라는 기존 라이브러리 를 pom.xml에 활용할 수 있습니다.

<dependency>
    <groupId>org.fusesource.jansi</groupId>
    <artifactId>jansi</artifactId>
    <version>2.4.0</version>
</dependency>

이제 컬러로 로그인하려면 JANSI가 제공하는 ANSI API를 호출하기만 하면 됩니다.

private static void logColorUsingJANSI() {
    AnsiConsole.systemInstall();

    System.out.println(ansi()
        .fgRed()
        .a("Some red text")
        .fgBlue()
        .a(" and some blue text")
        .reset());

    AnsiConsole.systemUninstall();
}

그러면 다음과 같은 텍스트가 생성됩니다.

일부 빨간색 텍스트 및 일부 파란색 텍스트

먼저 AnsiConsole을 설치 하고 완료 되면 제거해야 합니다.

ANSI 코드와 마찬가지로 JANSI는 광범위한 로깅 형식도 제공합니다.

JANSI는 사용 중인 터미널을 감지하고 필요한 적절한 플랫폼별 API를 호출하여 이 기능을 달성합니다. 즉, JANSI가 Windows 명령 프롬프트를 감지하면 작동하지 않는 ANSI 코드를 사용하는 대신 JNI(Java Native Interface) 메서드를 사용하는 라이브러리를 호출합니다.

또한 JANSI는 Windows 명령 프롬프트에서만 작동하는 것이 아니라 대부분의 터미널을 다룰 수 있습니다(Eclipse의 컬러 텍스트 설정이 제한되어 있기 때문에 Eclipse IDE 콘솔은 그 중 하나가 아니지만).

마지막으로 JANSI는 환경에서 필요하지 않을 때 원치 않는 ANSI 코드를 제거하여 로그를 깨끗하고 깔끔하게 유지하는 데 도움이 됩니다.

전반적으로 JANSI는 대부분의 환경과 터미널에 컬러로 로그인할 수 있는 강력하고 편리한 방법을 제공합니다.

4. 결론

이 기사에서는 ANSI 코드를 사용하여 콘솔 글꼴의 색상을 제어하는 ​​방법을 배웠고 색상을 사용하여 로그 수준을 구별하는 방법의 예를 보았습니다.

마지막으로 모든 콘솔이 ANSI 코드를 지원하는 것은 아니라는 사실을 발견하고 보다 정교한 지원을 제공하는 JANSI라는 라이브러리를 강조했습니다.

항상 그렇듯이 예제 프로젝트는  GitHub에서 사용할 수 있습니다 .

Generic footer banner