Creating a unified logging schema for the JVM was introduced in Java 9. Here is a comprehensive list of the goals of that effort:
- To create a JVM-wide set of command line options for all logging operations
- To use categorized tags for logging
- To permit messages to have multiple tags, also referred to as tag sets
- To provide six levels of logging:
- Error
- Warning
- Information
- Debug
- Trace
- Develop
- To select which messages are logged based on levels
- To optionally direct logging to the console or a file:
- Print one line at a time and do not support interleaving within the same line
- To permit the output of multiple line logs (non-interleaved)
- To format all logging messages so that they are easily human-read
- To add decorations such as uptime, level, and tags
- Like levels, to select which messages are logged based on decorations
- To convert pre-Java 9 tty>print logging to use unified logging as the output
- To permit dynamic message configuration using jcmd and MBeans
- To permit the ability to enable and disable individual log messages
- To add the ability to determine the order in which decorations are printed
The unified logging changes to the JVM can be grouped into the following five categories:
- Command-line options
- Decorations
- Levels
- Output
- Tags
Let's briefly look at each of these categories.