| // SPDX-FileCopyrightText: © 2021 Matthias Andreas Benkard <code@mail.matthias.benkard.de> |
| // |
| // SPDX-License-Identifier: LGPL-3.0-or-later |
| |
| 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: |
| * |
| * {@snippet lang="properties" : |
| * handlers = eu.mulk.quarkus.googlecloud.jsonlogging.logmanager.ConsoleHandler |
| * } |
| * |
| * <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: |
| * |
| * {@snippet lang="properties" : |
| * logging.config = classpath:logging.properties |
| * } |
| * |
| * <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: |
| * |
| * {@snippet lang="xml" : |
| * <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> |
| * } |
| * |
| * <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())); |
| } |
| } |