blob: a1dbde753bf5e18759416a48f062f521ea6a52f1 [file] [log] [blame]
package eu.mulk.quarkus.googlecloud.jsonlogging.logmanager;
import eu.mulk.quarkus.googlecloud.jsonlogging.Formatter;
import java.io.InputStream;
import java.util.Collections;
import org.jboss.logmanager.handlers.ConsoleHandler;
/**
* A {@link ConsoleHandler} preconfigured with {@link Formatter}.
*
* <p>Useful as a handler for {@link java.util.logging}.
*
* <p>If you have a {@code logging.properties} file (see {@link
* java.util.logging.LogManager#readConfiguration(InputStream)}), you can use this handler by
* setting the following properties:
*
* <pre>{@code
* handlers = eu.mulk.quarkus.googlecloud.jsonlogging.logmanager.ConsoleHandler
* }</pre>
*
* <p><strong>Note:</strong> You can use {@code org.slf4j.bridge.SLF4JBridgeHandler} from {@code
* org.slf4j:jul-to-slf4j} instead if you also have {@code org.jboss.slf4j:slf4j-jboss-logmanager}
* on the class path. In comparison to this class, which relies on the relatively efficient {@link
* org.jboss.logmanager.ExtLogRecord#wrap}, routing through SLF4J incurs additional overhead because
* of the necessary conversions between SLF4J's log entry structure and {@link
* java.util.logging.LogRecord}.
*
* <h2>Usage with Spring Boot</h2>
*
* <p>In case you are using Spring Boot, note that in addition to ensuring that {@code
* org.springframework.boot.logging.java.JavaLoggingSystem} is the logging system in use (see
* below), you need to accompany this with an entry in {@code application.properties} that points to
* your {@code logging.properties} file:
*
* <pre>{@code
* logging.config = classpath:logging.properties
* }</pre>
*
* <p>In order to ensure that Spring Boot chooses {@code JavaLoggingSystem} over other
* implementations, make sure that no other logging backends are present on the class path. A simple
* way of doing this is by relying on {@code spring-boot-starter-logging} while excluding Logback:
*
* <pre>{@code
* <dependency>
* <groupId>org.springframework.boot</groupId>
* <artifactId>spring-boot-starter</artifactId>
* <exclusions>
* <exclusion>
* <groupId>ch.qos.logback</groupId>
* <artifactId>logback-classic</artifactId>
* </exclusion>
* </exclusions>
* </dependency>
* }</pre>
*
* <p>You will probably want to include at least {@code org.jboss.slf4j:slf4j-jboss-logmanager} as
* well. In addition, {@code org.slf4j:jcl-over-slf4j}, {@code
* org.jboss.logmanager:log4j-jboss-logmanager}, and {@code
* org.jboss.logmanager:log4j2-jboss-logmanager} may be useful, but are not required.
*/
@SuppressWarnings("java:S110")
public final class DefaultConsoleHandler extends ConsoleHandler {
/** Constructs console handler with a formatter created by {@link Formatter#load}. */
public DefaultConsoleHandler() {
super(Formatter.load(Collections.emptyList(), Collections.emptyList()));
}
}