如何登錄到彩色控制台
一、簡介
添加一些顏色可以使日誌更易於閱讀。
在本文中,我們將了解如何為 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 代碼沒有打印出來,字體顏色變成了紅色:
這裡有一些文字
現在文字是紅色的
請注意,我們需要確保在完成日誌記錄後重置字體顏色。
幸運的是,這很容易。我們可以簡單地打印\u001B[31m
,這是 ANSI 重置命令。
重置命令會將控制台重置為其默認顏色。請注意,這可能不一定是黑色,它可以是白色或控制台配置的任何其他顏色。例如:
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 代碼,而是調用使用Java 本機接口 (JNI)方法的庫。
此外,JANSI 不僅僅適用於 Windows 命令提示符——它能夠覆蓋大多數終端(儘管 Eclipse IDE 控制台不是其中之一,因為 Eclipse 中對彩色文本的設置有限)。
最後,JANSI 還將確保在環境不需要時去除不需要的 ANSI 代碼,幫助保持我們的日誌乾淨整潔。
總體而言,JANSI 為我們提供了一種強大而便捷的方式,可以將彩色登錄到大多數環境和終端。
4。結論
在本文中,我們學習瞭如何使用 ANSI 代碼來控制控制台字體的顏色,並看到瞭如何使用顏色區分日誌級別的示例。
最後,我們發現並非所有控制台都支持 ANSI 代碼,因此我們強調了一個這樣的庫,即 JANSI,它提供了更複雜的支持。
與往常一樣,示例項目在 GitHub 上可用。