Java : LogManager (logging) with Examples

LogManager (Java SE 17 & JDK 17) API Examples.
You will find code examples on most LogManager methods.


Summary

There is a single global LogManager object that is used to maintain a set of shared state about Loggers and log services.

Class diagram

The default configuration is typically loaded from the properties file below.

  • java-home/conf/logging.properties

An excerpt from OpenJDK 17.0.1

############################################################
#  	Global properties
############################################################

handlers= java.util.logging.ConsoleHandler

# Default global logging level.
.level= INFO

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

# Limit the messages that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

If you want to use another file, set the "java.util.logging.config.file" system property.

Example : sample.properties

handlers=java.util.logging.ConsoleHandler
.level=ALL
java.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.XMLFormatter

Main.java

import java.util.logging.ConsoleHandler;
import java.util.logging.Logger;

public class Main {

    public static void main(String[] args) {
        System.out.println(System.getProperty("java.util.logging.config.file")); // sample.properties

        final var logger = Logger.getLogger("");
        System.out.println(logger.getLevel()); // ALL

        final var handler = new ConsoleHandler();
        System.out.println(handler.getLevel()); // ALL
        System.out.println(handler.getFormatter()); // java.util.logging.XMLFormatter@3b07d329
    }
}
java -D"java.util.logging.config.file=sample.properties" Main

Fields

static final String LOGGING_MXBEAN_NAME

String representation of the ObjectName for the management interface for the logging facility.

// java.util.logging:type=Logging
System.out.println(LogManager.LOGGING_MXBEAN_NAME);

Constructors

LogManager ()

Protected constructor.

I think it's rare to create a subclass of LogManager. Therefore, the code example is omitted.

Methods

LogManager addConfigurationListener (Runnable listener)

Adds a configuration listener to be invoked each time the logging configuration is read.

final var logManager = LogManager.getLogManager();

final Runnable listener = () -> {
    System.out.println("Listener OK!");
};

logManager.addConfigurationListener(listener);
logManager.updateConfiguration(null);

// Result
// ↓
//Listener OK!

logManager.removeConfigurationListener(listener);
logManager.updateConfiguration(null);

// Result
// ↓
//<No output>

boolean addLogger (Logger logger)

Add a named logger.

This method is called from log services. In general, you don't need to call this method. Therefore, the code example is omitted.

void checkAccess ()

Deprecated, for removal: This API element is subject to removal in a future version. This method is only useful in conjunction with the Security Manager, which is deprecated and subject to removal in a future release.

Deprecated.

Logger getLogger (String name)

Method to find a named logger.

final var logManager = LogManager.getLogManager();

final var ret1 = logManager.getLogger("com.example.logging");
System.out.println(ret1); // null

final var ret2 = Logger.getLogger("com.example.logging");
System.out.println(ret2.getName()); // com.example.logging

final var ret3 = logManager.getLogger("com.example.logging");
System.out.println(ret2 == ret3); // true

Enumeration<String> getLoggerNames ()

Get an enumeration of known logger names.

final var logManager = LogManager.getLogManager();

// The empty name (the root logger) and Logger.GLOBAL_LOGGER_NAME.
final var ret1 = logManager.getLoggerNames();
System.out.println(Collections.list(ret1)); // [, global]

final var loggerA = Logger.getLogger("com.example.logging");
System.out.println(loggerA.getName()); // com.example.logging

final var ret2 = logManager.getLoggerNames();
System.out.println(Collections.list(ret2)); // [, global, com.example.logging]

final var loggerB = Logger.getLogger("com.example");
System.out.println(loggerB.getName()); // com.example

final var ret3 = logManager.getLoggerNames();
System.out.println(Collections.list(ret3));  // [, global, com.example, com.example.logging]

static LoggingMXBean getLoggingMXBean ()

Deprecated. java.util.logging.LoggingMXBean is deprecated and replaced with java.lang.management.PlatformLoggingMXBean.

Deprecated.

static LogManager getLogManager ()

Returns the global LogManager object.

final var logManager = LogManager.getLogManager();
System.out.println(logManager); // java.util.logging.LogManager@79acc4ff

String getProperty (String name)

Get the value of a logging property.

final var logManager = LogManager.getLogManager();

// Global properties
final var ret1 = logManager.getProperty("handlers");
System.out.println(ret1); // java.util.logging.ConsoleHandler

final var ret2 = logManager.getProperty(".level");
System.out.println(ret2); // INFO

// ConsoleHandler
final var ret3 = logManager.getProperty("java.util.logging.ConsoleHandler.level");
System.out.println(ret3); // INFO

final var ret4 = logManager.getProperty("java.util.logging.ConsoleHandler.formatter");
System.out.println(ret4); // java.util.logging.SimpleFormatter

void readConfiguration ()

Reads and initializes the logging configuration.

In general, you don't need to call this method. Therefore, the code example is omitted.

Please see API Note.

void readConfiguration (InputStream ins)

Reads and initializes the logging configuration from the given input stream.

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.logging.LogManager;

public class LoggerConfig {

    public LoggerConfig() throws IOException {

        final var properties = """
                .level = ALL
                java.util.logging.ConsoleHandler.level = ALL
                java.util.logging.ConsoleHandler.formatter = java.util.logging.XMLFormatter
                """;

        try (final var ins = new ByteArrayInputStream(properties.getBytes())) {
            final var logManager = LogManager.getLogManager();
            logManager.readConfiguration(ins);
        }
    }
}
import java.util.logging.ConsoleHandler;
import java.util.logging.Logger;

public class Main {

    public static void main(String[] args) {

        final var ret = System.getProperty("java.util.logging.config.class");
        System.out.println(ret); // LoggerConfig

        final var logger = Logger.getLogger("");
        System.out.println(logger.getLevel()); // ALL

        final var handler = new ConsoleHandler();
        System.out.println(handler.getLevel()); // ALL
        System.out.println(handler.getFormatter()); // java.util.logging.XMLFormatter@3b07d329
    }
}
java -D"java.util.logging.config.class=LoggerConfig" Main

void removeConfigurationListener (Runnable listener)

Removes a previously registered configuration listener.

Please see addConfigurationListener(Runnable listener).

void reset ()

Reset the logging configuration.

final var logger = Logger.getLogger("");
System.out.println(logger.getLevel()); // INFO

logger.setLevel(Level.ALL);
System.out.println(logger.getLevel()); // ALL

final var logManager = LogManager.getLogManager();
logManager.reset();

System.out.println(logger.getLevel()); // INFO

void updateConfiguration (InputStream ins, Function<String,BiFunction<String,String,String>> mapper)

Updates the logging configuration.

final var logManager = LogManager.getLogManager();

{
    final var ret1 = logManager.getProperty(".level");
    System.out.println(ret1); // INFO

    final var ret2 = logManager.getProperty("java.util.logging.ConsoleHandler.level");
    System.out.println(ret2); // INFO

    final var ret3 = logManager.getProperty("java.util.logging.ConsoleHandler.formatter");
    System.out.println(ret3); // java.util.logging.SimpleFormatter
}

final var properties = """
        .level=ALL
        java.util.logging.ConsoleHandler.level=ALL
        java.util.logging.ConsoleHandler.formatter=java.util.logging.XMLFormatter
        """;

try (final var ins = new ByteArrayInputStream(properties.getBytes())) {
    logManager.updateConfiguration(ins, null);
}

{
    final var ret1 = logManager.getProperty(".level");
    System.out.println(ret1); // ALL

    final var ret2 = logManager.getProperty("java.util.logging.ConsoleHandler.level");
    System.out.println(ret2); // ALL

    final var ret3 = logManager.getProperty("java.util.logging.ConsoleHandler.formatter");
    System.out.println(ret3); // java.util.logging.XMLFormatter
}
final var logManager = LogManager.getLogManager();

final var properties = """
        .level=ALL
        java.util.logging.ConsoleHandler.level=ALL
        java.util.logging.ConsoleHandler.formatter=java.util.logging.XMLFormatter
        """;

try (final var ins = new ByteArrayInputStream(properties.getBytes())) {
    logManager.updateConfiguration(ins, (k) -> (o, n) -> {
        if (k.equals(".level")) {
            System.out.println(o); // INFO
            System.out.println(n); // ALL

            return "OFF";

        } else {
            return n;
        }
    });
}

final var ret1 = logManager.getProperty(".level");
System.out.println(ret1); // OFF

final var ret2 = logManager.getProperty("java.util.logging.ConsoleHandler.level");
System.out.println(ret2); // ALL

final var ret3 = logManager.getProperty("java.util.logging.ConsoleHandler.formatter");
System.out.println(ret3); // java.util.logging.XMLFormatter

void updateConfiguration (Function<String,BiFunction<String,String,String>> mapper)

Updates the logging configuration.

final var logManager = LogManager.getLogManager();

{
    final var ret1 = logManager.getProperty(".level");
    System.out.println(ret1); // INFO

    final var ret2 = logManager.getProperty("java.util.logging.ConsoleHandler.level");
    System.out.println(ret2); // INFO

    final var ret3 = logManager.getProperty("java.util.logging.ConsoleHandler.formatter");
    System.out.println(ret3); // java.util.logging.SimpleFormatter
}

logManager.updateConfiguration((k) -> (o, n) -> {
    if (k.equals(".level")) {
        return "ALL";
    } else {
        return n;
    }
});

{
    final var ret1 = logManager.getProperty(".level");
    System.out.println(ret1); // ALL

    final var ret2 = logManager.getProperty("java.util.logging.ConsoleHandler.level");
    System.out.println(ret2); // INFO

    final var ret3 = logManager.getProperty("java.util.logging.ConsoleHandler.formatter");
    System.out.println(ret3); // java.util.logging.SimpleFormatter
}

Related posts

To top of page