使用 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 {
    // Adds a dependency to the SLF4J API.
    implementation("org.slf4j:slf4j-api:1.7.36")
    
    // Adds a dependency to the Log4j binding for SLF4J.
    implementation("org.slf4j:slf4j-log4j12:1.7.36")

    // Adds a dependency with SLF4J handler for JUL.
    implementation("org.slf4j:jul-to-slf4j:1.7.36")
}

配置 Log4J

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

# Define the root logger with the appender file.
log4j.rootLogger = ALL, FILE

# Define the file appender.
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=log/log.out

# Define the layout for file appender.
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;

/**
 * This example demonstrates how to capture JxBrowser logs using SLF4J API.
 */
public final class LoggingRedirectExample {

    public static void main(String[] args) {

        // Configure JxBrowser logging level.
        Logger.level(Level.DEBUG);

        // Get the JxBrowser logger.
        java.util.logging.Logger jxBrowserLogger =
                LogManager.getLogManager().getLogger("com.teamdev.jxbrowser");

        // Remove existing handlers attached to the JxBrowser logger.
        for (java.util.logging.Handler handler : jxBrowserLogger.getHandlers()) {
            jxBrowserLogger.removeHandler(handler);
        }

        // Add SLF4JBridgeHandler to the JxBrowser logger to route log records to the SLF4j.
        jxBrowserLogger.addHandler(new SLF4JBridgeHandler());

        // Creating and running Chromium engine.
        Engine engine = Engine.newInstance(HARDWARE_ACCELERATED);
        engine.close();
    }
}

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

总结

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

Go Top