DOM
SWT
HTML
Integration
Logging
Chromium features
Redirecting JxBrowser logs with SLF4J
This tutorial shows how to redirect JxBrowser logs with SLF4J.
Prerequisites
To go through this tutorial you will need:
- Git.
- Java 17 or higher.
- A valid JxBrowser license. It can be either Evaluation or Commercial. For more information on licensing please see the licensing guide.
Why redirect logs
JxBrowser logging is based on java.util.logging, a logging framework that comes with JDK.
By default, JxBrowser logs aren’t captured by other, more advanced, logging libraries and may be lost.
In this tutorial, we’re going to demonstrate how to redirect and capture JxBrowser logs with the help of SLF4J.
Setting up a project
The code of the example application for this tutorial is available along with other examples from a GitHub repository as a Gradle-based project.
Getting the code
To get the code please execute the following commands:
$ git clone https://github.com/TeamDev-IP/JxBrowser-Examples
$ cd JxBrowser-Examples/tutorials/jul-logs-redirect
Adding the license
To run this tutorial you need to set up a license key.
Adding Gradle dependencies
In this example, we use Log4j library with SLF4J facade.
In the build.gradle.kts
, we add the following dependencies:
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")
}
Configuring Log4J
The next step is to add log4j.properties
file to configure Log4j.
Let’s configure logging levels and the path to the log file:
# 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
Application code
Add the following code to the main()
method:
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();
Now let’s see what we’ve done here:
Set JxBrowser logging level to
DEBUG
. For more information about JxBrowser logging please see the logging guide.Logger.level(Level.DEBUG);
Get the JxBrowser logger and remove the existing handlers attached to it.
var jxBrowserLogger = LogManager.getLogManager().getLogger("com.teamdev.jxbrowser"); for (var handler : jxBrowserLogger.getHandlers()) { jxBrowserLogger.removeHandler(handler); }
We use
SLF4JBridgeHandler
. It routes logs from JUL to SLF4J. Add theSLF4JBridgeHandler
to the JxBrowser logger:jxBrowserLogger.addHandler(new SLF4JBridgeHandler());
To make JxBrowser write log records, create an
Engine
:var engine = Engine.newInstance(HARDWARE_ACCELERATED); engine.close();
Here is the complete Java code:
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.
var jxBrowserLogger =
LogManager.getLogManager().getLogger("com.teamdev.jxbrowser");
// Remove existing handlers attached to the JxBrowser logger.
for (var 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.
var engine = Engine.newInstance(HARDWARE_ACCELERATED);
engine.close();
}
}
All JxBrowser logs will be saved in the log/log.out
file that was configured in our log4j.properties
file.
Summary
In this tutorial, we have demonstrated how you can redirect JxBrowser logs with SLF4J API by configuring Log4j.