使用 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);
var jxBrowserLogger = LogManager.getLogManager().getLogger("com.teamdev.jxbrowser");
for (var handler : jxBrowserLogger.getHandlers()) {
jxBrowserLogger.removeHandler(handler);
}
jxBrowserLogger.addHandler(new SLF4JBridgeHandler());
var engine = Engine.newInstance(HARDWARE_ACCELERATED);
engine.close();
现在让我们看看我们在这里做了什么:
将 JxBrowser 日志级别设置为
DEBUG
。有关 JxBrowser 日志记录的更多信息,请参阅日志记录指南。Logger.level(Level.DEBUG);
获取 JxBrowser 记录器,并删除附加到它的现有处理程序。
var jxBrowserLogger = LogManager.getLogManager().getLogger("com.teamdev.jxbrowser"); for (var handler : jxBrowserLogger.getHandlers()) { jxBrowserLogger.removeHandler(handler); }
我们使用
SLF4JBridgeHandler
,它将日志从 JUL 路由到 SLF4J。将SLF4JBridgeHandler
添加到 JxBrowser 记录器:jxBrowserLogger.addHandler(new SLF4JBridgeHandler());
要让 JxBrowser 写入日志记录,需要创建一个
Engine
:var 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 记录器。
var jxBrowserLogger = LogManager.getLogManager().getLogger("com.teamdev.jxbrowser");
// 删除附加到 JxBrowser 记录器的现有处理程序。
for (var handler : jxBrowserLogger.getHandlers()) {
jxBrowserLogger.removeHandler(handler);
}
// 将 SLF4JBridgeHandler 添加到 JxBrowser 记录器以将日志记录路由到 SLF4j。
jxBrowserLogger.addHandler(new SLF4JBridgeHandler());
// 创建并运行 Chromium Engine。
var engine = Engine.newInstance(HARDWARE_ACCELERATED);
engine.close();
}
}
所有 JxBrowser 日志都将保存在我们的 log4j.properties
文件中配置的 log/log.out
文件中。
总结
在本教程中,我们已经演示了如何通过配置 Log4j 来使用 SLF4J API 重定向 JxBrowser 的日志。