Version: 9.3.28.v20191105 |

Example: Logging with Java’s java.util.logging via Slf4j
Previous | Chapter 11. Jetty Logging Home | Next

##### Contact the core Jetty developers at www.webtide.com

private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ... scalability guidance for your apps and Ajax/Comet projects ... development services for sponsored feature development

## Example: Logging with Java’s java.util.logging via Slf4j

It is possible to have the Jetty Server logging configured so that `java.util.logging` controls the output of logging events produced by Jetty.

This example demonstrates how to configuring Jetty for logging to `java.util.logging` via Slf4j and the Slf4j binding layer for java.util.logging. If you want to use the built-in native `JavaUtilLog` implementation, see #example-logging-java-util-logging-native .

A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with `java.util.logging`.

    [mybase]$ mkdir modules
    [mybase]$ cd modules

    [modules]$ curl -O https://raw.githubusercontent.com/jetty-project/logging-modules/master/java.util.logging-slf4j/logging.mod
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   826  100   826    0     0   2468      0 --:--:-- --:--:-- --:--:--  2473
    [modules]$ cd ..

    [mybase]$ java -jar /opt/jetty-dist/start.jar --add-to-start=logging
    INFO: logging         initialised in ${jetty.base}/start.ini (appended)
    MKDIR: ${jetty.base}/logs
    DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-jdk14/1.6.6/slf4j-jdk14-1.6.6.jar to lib/logging/slf4j-jdk14-1.6.6.jar
    DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.6.6/slf4j-api-1.6.6.jar to lib/logging/slf4j-api-1.6.6.jar
    DOWNLOAD: https://raw.githubusercontent.com/jetty-project/logging-modules/master/java.util.logging-slf4j/jetty-logging.xml to etc/jetty-logging.xml
    DOWNLOAD: https://raw.githubusercontent.com/jetty-project/logging-modules/master/java.util.logging-slf4j/logging.properties to resources/logging.properties
    DOWNLOAD: https://raw.githubusercontent.com/jetty-project/logging-modules/master/java.util.logging-slf4j/jetty-logging.properties to resources/jetty-logging.properties
    INFO: resources       initialised transitively
    INFO: resources       enabled in     ${jetty.base}/start.ini

    [mybase]$ java -jar /opt/jetty-dist/start.jar

The replacement `logging.mod` performs a number of tasks.

1. `mybase` is a `${jetty.base}` directory
2. The jetty-distribution is unpacked (and untouched) into `/opt/jetty-dist/` and becomes the `${jetty.home}` directory for this demonstration.
3. The `curl` command downloads the replacement `logging.mod` and puts it into the `${jetty.base}/modules/` directory for use by `mybase` only.

4. The `start.jar --add-to-start=logging` command performs a number of steps to make the logging module available to the `${jetty.base}` configuration.

   1. The `--module=logging` command is added to the `${jetty.base}/start.ini` configuration.
   2. Required `${jetty.base}` directories are created: `${jetty.base}/logs` and `${jetty.base}/resources`.

   3. Required libraries are downloaded (if not present already): slf4j-api, and slf4j-jdk14.

      - The libraries are put in the `${jetty.base}/lib/logging/` directory.

   4. Required configuration files are downloaded (if not present already): `jetty-logging.properties`, and `logging.properties`.

      - The configuration files are put in the `${jetty.base}/resources/` directory.

   5. Required `java.util.logging` initialization commands are downloaded (if not present already): `jetty-logging.xml`.

      - The xml file is put in the `${jetty.base}/etc/` directory.

At this point the Jetty `mybase` is configured so that the Jetty server itself will log using `java.util.logging`, using the `java.util.logging` configuration found in `mybase/resources/logging.properties`.

The server classpath can be verified by using the `start.jar --list-config` command.

In essence, Jetty is now configured to emit its own logging events to slf4j, and slf4j itself is using the static log binder found in `slf4j-jdk14.jar`, making all Jetty + Slf4j + `java.util.logging` events emitted by the Jetty server go to `java.util.logging` for routing (to console, file, etc…​).

If there any custom `java.util.logging` handlers to be used, put the implementation jar in the `${jetty.base}/lib/logging/` directory and reference them in the `${jetty.base}/resources/logging.properties` file.

> ### Note

> `java.util.logging` is configured via the `${jetty.base}/resources/logging.properties` file during a valid startup of Jetty.

> This means that if there is any startup errors that occur before `java.util.logging` is configured, they will likely be lost and/or not routed through your configuration.

> Other logging frameworks are more reliable in that they always initialize and configure on first use, unlike `java.util.logging`.

> - While it is possible to configure `java.util.logging` sooner, even at JVM startup, the example demonstrated here does not show this technique. For more information consult the official `java.util.logging.LogManager` javadoc documentation from Oracle.

Previous | Top | Next
Example: Logging with Apache Log4j | Home | Example: Logging with Java’s java.util.logging via JavaUtilLog

See an error or something missing? Contribute to this documentation at Github!(Generated: 2019-11-05)