blob: 2ac55870d4de37b5eb4005570b2165fe886be5fb [file] [log] [blame]
Matthias Andreas Benkardddcce2e2023-09-24 12:57:37 +02001// SPDX-FileCopyrightText: © 2023 Matthias Andreas Benkard <code@mail.matthias.benkard.de>
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
5package eu.mulk.quarkus.googlecloud.jsonlogging.logmanager;
6
7import eu.mulk.quarkus.googlecloud.jsonlogging.Formatter;
8import java.io.InputStream;
9import java.util.logging.Handler;
10import org.jboss.logmanager.ConfiguratorFactory;
11import org.jboss.logmanager.LogContext;
12import org.jboss.logmanager.LogContextConfigurator;
13import org.jboss.logmanager.handlers.ConsoleHandler;
14
15/**
16 * A convenient {@link ConfiguratorFactory} for JBoss Log Manager.
17 *
18 * <p>You can register this class through the {@link java.util.ServiceLoader} mechanism as a
19 * provider of the {@link ConfiguratorFactory} interface (under the name of {@code
20 * org.jboss.logmanager.ConfiguratorFactory}) to automatically register a {@link ConsoleHandler}
21 * using {@link Formatter} as the default log output method for the application.
22 */
23public final class DefaultConfiguratorFactory implements ConfiguratorFactory {
24
25 private final Handler[] rootHandlers;
26 private final ConfiguratorFactory upstreamConfiguratorFactory;
27
28 /**
29 * Constructs a JBoss Log Manager configuration that uses {@link Formatter} and {@link
30 * ConsoleHandler} for log output.
31 */
32 @SuppressWarnings({"java:S2095", "resource"})
33 public DefaultConfiguratorFactory() {
34 rootHandlers = new Handler[] {createConsoleHandler()};
35 upstreamConfiguratorFactory =
36 new org.jboss.logmanager.configuration.DefaultConfiguratorFactory();
37 }
38
39 /**
40 * Creates a {@link ConsoleHandler} that uses {@link Formatter} for formatting.
41 *
42 * @return a preconfigured {@link ConsoleHandler}.
43 */
44 public static ConsoleHandler createConsoleHandler() {
45 return new DefaultConsoleHandler();
46 }
47
48 @Override
49 public LogContextConfigurator create() {
50 var upstreamConfigurator = upstreamConfiguratorFactory.create();
51 return new LogContextConfigurator() {
52 @Override
53 public void configure(LogContext logContext, InputStream inputStream) {
54 upstreamConfigurator.configure(logContext, inputStream);
55 var logger = logContext.getLogger("");
56 logger.setHandlers(rootHandlers);
57 }
58 };
59 }
60
61 @Override
62 public int priority() {
63 return 50;
64 }
65}