List icon 目录

使用 SLF4J 重定向 JxBrowser 日志

本教程展示了如何使用 SLF4J 重定向 JxBrowser 日志。

前提条件

要完成本教程,您需要:

  • Git.
  • Java 8 或更高版本。
  • 一个有效的 JxBrowser 许可证。它可以是评估版或商业版。关于许可证的更多信息,请参见许可指南。

为什么重定向日志

JxBrowser 的日志记录是基于 java.util.logging 的,这是 JDK 附带的日志框架。

默认情况下,JxBrowser 日志不会被其他更高级的日志库捕获,并且可能会丢失。

在本教程中,我们将演示如何使用 SLF4J 重定向和捕获 JxBrowser 日志。

设置项目

本教程示例应用程序的代码与其他示例一起作为一个基于 Gradle 的项目,存储在 GitHub 仓库中。

获取代码

要获取代码,请执行以下命令:

$ git clone https://github.com/TeamDev-IP/JxBrowser-Examples
$ cd JxBrowser-Examples/tutorials/jul-logs-redirect

添加许可证

要运行本教程,您需要设置一个许可证密钥

添加 Gradle 依赖项

在此示例中,我们使用带有 SLF4J 外观的 Log4j 库。

build.gradle.kts 中,我们添加以下依赖项:

dependencies {
    // 向 SLF4J API 添加依赖项。
    implementation("org.slf4j:slf4j-api:1.7.36")
    
    // 向 SLF4J 的 Log4j 绑定添加依赖项。
    implementation("org.slf4j:slf4j-log4j12:1.7.36")

    // 为 JUL 添加带有 SLF4J 处理程序的依赖项。
    implementation("org.slf4j:jul-to-slf4j:1.7.36")
}

配置 Log4J

下一步是添加 log4j.properties 文件来配置 Log4j。让我们配置日志级别和日志文件的路径:

# 使用附加器文件定义根记录器。
log4j.rootLogger = ALL, FILE

# 定义文件附加器。
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=log/log.out

# 定义文件附加器的布局。
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

应用程序代码

将以下代码添加到 main() 方法中:

Logger.level(Level.DEBUG);

java.util.logging.Logger jxBrowserLogger =
        LogManager.getLogManager().getLogger("com.teamdev.jxbrowser");
        
for (java.util.logging.Handler handler : jxBrowserLogger.getHandlers()) {
    jxBrowserLogger.removeHandler(handler);
}        

jxBrowserLogger.addHandler(new SLF4JBridgeHandler());

Engine engine = Engine.newInstance(HARDWARE_ACCELERATED);
engine.close();

现在让我们看看我们在这里做了什么:

  1. 将 JxBrowser 日志级别设置为 DEBUG。有关 JxBrowser 日志记录的更多信息,请参阅日志记录指南。

    Logger.level(Level.DEBUG);
    
  2. 获取 JxBrowser 记录器,并删除附加到它的现有处理程序。

    java.util.logging.Logger jxBrowserLogger = 
            LogManager.getLogManager().getLogger("com.teamdev.jxbrowser"); 
    
    for (java.util.logging.Handler handler : jxBrowserLogger.getHandlers()) {
        jxBrowserLogger.removeHandler(handler);
    }
    
  3. 我们使用 SLF4JBridgeHandler,它将日志从 JUL 路由到 SLF4J。将 SLF4JBridgeHandler 添加到 JxBrowser 记录器:

    jxBrowserLogger.addHandler(new SLF4JBridgeHandler());
    
  4. 要让 JxBrowser 写入日志记录,需要创建一个 Engine

    Engine engine = Engine.newInstance(HARDWARE_ACCELERATED);
    engine.close();
    

下面是完整的 Java 代码:

import static com.teamdev.jxbrowser.engine.RenderingMode.HARDWARE_ACCELERATED;

import com.teamdev.jxbrowser.browser.Browser;
import com.teamdev.jxbrowser.engine.Engine;
import com.teamdev.jxbrowser.logging.Level;
import com.teamdev.jxbrowser.logging.Logger;
import java.util.logging.LogManager;
import org.slf4j.bridge.SLF4JBridgeHandler;

/**
 * 此示例演示了如何使用 SLF4J API 捕获 JxBrowser 的日志。
 */
public final class LoggingRedirectExample {

    public static void main(String[] args) {

        // 配置 JxBrowser 日志记录级别。
        Logger.level(Level.DEBUG);

        // 获取 JxBrowser 记录器。
        java.util.logging.Logger jxBrowserLogger =
                LogManager.getLogManager().getLogger("com.teamdev.jxbrowser");

        // 删除附加到 JxBrowser 记录器的现有处理程序。
        for (java.util.logging.Handler handler : jxBrowserLogger.getHandlers()) {
            jxBrowserLogger.removeHandler(handler);
        }

        // 将 SLF4JBridgeHandler 添加到 JxBrowser 记录器以将日志记录路由到 SLF4j。
        jxBrowserLogger.addHandler(new SLF4JBridgeHandler());

        // 创建并运行 Chromium Engine。
        Engine engine = Engine.newInstance(HARDWARE_ACCELERATED);
        engine.close();
    }
}

所有 JxBrowser 日志都将保存在我们的 log4j.properties 文件中配置的 log/log.out 文件中。

总结

在本教程中,我们已经演示了如何通过配置 Log4j 来使用 SLF4J API 重定向 JxBrowser 的日志。