jdk/src/share/classes/sun/util/logging/PlatformLogger.java
author malenkov
Tue, 29 Oct 2013 17:01:06 +0400
changeset 21278 ef8a3a2a72f2
parent 20864 fb03b7eaa114
permissions -rw-r--r--
8022746: List of spelling errors in API doc Reviewed-by: alexsch, smarks
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
     1
/*
20864
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
     2
 * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
     4
 *
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4828
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4828
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    10
 *
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    15
 * accompanied this code).
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    16
 *
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4828
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4828
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4828
diff changeset
    23
 * questions.
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    24
 */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    25
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    26
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    27
package sun.util.logging;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    28
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    29
import java.lang.ref.WeakReference;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    30
import java.io.PrintStream;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    31
import java.io.PrintWriter;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    32
import java.io.StringWriter;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    33
import java.security.AccessController;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    34
import java.security.PrivilegedAction;
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
    35
import java.util.Arrays;
3866
34cd368bd2dd 6882384: Update http protocol handler to use PlatformLogger
chegar
parents: 3861
diff changeset
    36
import java.util.Date;
34cd368bd2dd 6882384: Update http protocol handler to use PlatformLogger
chegar
parents: 3861
diff changeset
    37
import java.util.HashMap;
34cd368bd2dd 6882384: Update http protocol handler to use PlatformLogger
chegar
parents: 3861
diff changeset
    38
import java.util.Map;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    39
import sun.misc.JavaLangAccess;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    40
import sun.misc.SharedSecrets;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    41
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    42
/**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    43
 * Platform logger provides an API for the JRE components to log
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    44
 * messages.  This enables the runtime components to eliminate the
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    45
 * static dependency of the logging facility and also defers the
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    46
 * java.util.logging initialization until it is enabled.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    47
 * In addition, the PlatformLogger API can be used if the logging
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    48
 * module does not exist.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    49
 *
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    50
 * If the logging facility is not enabled, the platform loggers
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    51
 * will output log messages per the default logging configuration
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    52
 * (see below). In this implementation, it does not log the
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    53
 * the stack frame information issuing the log message.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    54
 *
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    55
 * When the logging facility is enabled (at startup or runtime),
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    56
 * the java.util.logging.Logger will be created for each platform
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    57
 * logger and all log messages will be forwarded to the Logger
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    58
 * to handle.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    59
 *
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    60
 * Logging facility is "enabled" when one of the following
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    61
 * conditions is met:
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    62
 * 1) a system property "java.util.logging.config.class" or
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    63
 *    "java.util.logging.config.file" is set
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    64
 * 2) java.util.logging.LogManager or java.util.logging.Logger
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    65
 *    is referenced that will trigger the logging initialization.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    66
 *
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    67
 * Default logging configuration:
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    68
 *   global logging level = INFO
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    69
 *   handlers = java.util.logging.ConsoleHandler
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    70
 *   java.util.logging.ConsoleHandler.level = INFO
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    71
 *   java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    72
 *
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    73
 * Limitation:
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    74
 * <JAVA_HOME>/lib/logging.properties is the system-wide logging
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    75
 * configuration defined in the specification and read in the
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    76
 * default case to configure any java.util.logging.Logger instances.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    77
 * Platform loggers will not detect if <JAVA_HOME>/lib/logging.properties
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    78
 * is modified. In other words, unless the java.util.logging API
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    79
 * is used at runtime or the logging system properties is set,
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    80
 * the platform loggers will use the default setting described above.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    81
 * The platform loggers are designed for JDK developers use and
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    82
 * this limitation can be workaround with setting
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    83
 * -Djava.util.logging.config.file system property.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    84
 *
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    85
 * @since 1.7
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    86
 */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
    87
public class PlatformLogger {
20864
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    88
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    89
    // The integer values must match that of {@code java.util.logging.Level}
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    90
    // objects.
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    91
    private static final int OFF     = Integer.MAX_VALUE;
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    92
    private static final int SEVERE  = 1000;
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    93
    private static final int WARNING = 900;
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    94
    private static final int INFO    = 800;
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    95
    private static final int CONFIG  = 700;
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    96
    private static final int FINE    = 500;
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    97
    private static final int FINER   = 400;
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    98
    private static final int FINEST  = 300;
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
    99
    private static final int ALL     = Integer.MIN_VALUE;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   100
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   101
    /**
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   102
     * PlatformLogger logging levels.
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   103
     */
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   104
    public static enum Level {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   105
        // The name and value must match that of {@code java.util.logging.Level}s.
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   106
        // Declare in ascending order of the given value for binary search.
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   107
        ALL,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   108
        FINEST,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   109
        FINER,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   110
        FINE,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   111
        CONFIG,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   112
        INFO,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   113
        WARNING,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   114
        SEVERE,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   115
        OFF;
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   116
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   117
        /**
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   118
         * Associated java.util.logging.Level lazily initialized in
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   119
         * JavaLoggerProxy's static initializer only once
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   120
         * when java.util.logging is available and enabled.
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   121
         * Only accessed by JavaLoggerProxy.
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   122
         */
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   123
        /* java.util.logging.Level */ Object javaLevel;
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   124
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   125
        // ascending order for binary search matching the list of enum constants
20864
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
   126
        private static final int[] LEVEL_VALUES = new int[] {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   127
            PlatformLogger.ALL, PlatformLogger.FINEST, PlatformLogger.FINER,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   128
            PlatformLogger.FINE, PlatformLogger.CONFIG, PlatformLogger.INFO,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   129
            PlatformLogger.WARNING, PlatformLogger.SEVERE, PlatformLogger.OFF
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   130
        };
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   131
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   132
        public int intValue() {
20864
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
   133
            return LEVEL_VALUES[this.ordinal()];
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   134
        }
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   135
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   136
        static Level valueOf(int level) {
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   137
            switch (level) {
21278
ef8a3a2a72f2 8022746: List of spelling errors in API doc
malenkov
parents: 20864
diff changeset
   138
                // ordering per the highest occurrences in the jdk source
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   139
                // finest, fine, finer, info first
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   140
                case PlatformLogger.FINEST  : return Level.FINEST;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   141
                case PlatformLogger.FINE    : return Level.FINE;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   142
                case PlatformLogger.FINER   : return Level.FINER;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   143
                case PlatformLogger.INFO    : return Level.INFO;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   144
                case PlatformLogger.WARNING : return Level.WARNING;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   145
                case PlatformLogger.CONFIG  : return Level.CONFIG;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   146
                case PlatformLogger.SEVERE  : return Level.SEVERE;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   147
                case PlatformLogger.OFF     : return Level.OFF;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   148
                case PlatformLogger.ALL     : return Level.ALL;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   149
            }
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   150
            // return the nearest Level value >= the given level,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   151
            // for level > SEVERE, return SEVERE and exclude OFF
20864
fb03b7eaa114 8011638: Remove deprecated methods in sun.util.logging.PlatformLogger
dfuchs
parents: 16736
diff changeset
   152
            int i = Arrays.binarySearch(LEVEL_VALUES, 0, LEVEL_VALUES.length-2, level);
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   153
            return values()[i >= 0 ? i : (-i-1)];
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   154
        }
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   155
    }
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   156
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   157
    private static final Level DEFAULT_LEVEL = Level.INFO;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   158
    private static boolean loggingEnabled;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   159
    static {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   160
        loggingEnabled = AccessController.doPrivileged(
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   161
            new PrivilegedAction<Boolean>() {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   162
                public Boolean run() {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   163
                    String cname = System.getProperty("java.util.logging.config.class");
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   164
                    String fname = System.getProperty("java.util.logging.config.file");
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   165
                    return (cname != null || fname != null);
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   166
                }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   167
            });
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   168
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   169
        // force loading of all JavaLoggerProxy (sub)classes to make JIT de-optimizations
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   170
        // less probable.  Don't initialize JavaLoggerProxy class since
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   171
        // java.util.logging may not be enabled.
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   172
        try {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   173
            Class.forName("sun.util.logging.PlatformLogger$DefaultLoggerProxy",
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   174
                          false,
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   175
                          PlatformLogger.class.getClassLoader());
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   176
            Class.forName("sun.util.logging.PlatformLogger$JavaLoggerProxy",
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   177
                          false,   // do not invoke class initializer
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   178
                          PlatformLogger.class.getClassLoader());
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   179
        } catch (ClassNotFoundException ex) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   180
            throw new InternalError(ex);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   181
        }
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   182
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   183
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   184
    // Table of known loggers.  Maps names to PlatformLoggers.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   185
    private static Map<String,WeakReference<PlatformLogger>> loggers =
7803
56bc97d69d93 6880112: Project Coin: Port JDK core library code to use diamond operator
smarks
parents: 7026
diff changeset
   186
        new HashMap<>();
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   187
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   188
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   189
     * Returns a PlatformLogger of a given name.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   190
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   191
    public static synchronized PlatformLogger getLogger(String name) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   192
        PlatformLogger log = null;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   193
        WeakReference<PlatformLogger> ref = loggers.get(name);
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   194
        if (ref != null) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   195
            log = ref.get();
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   196
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   197
        if (log == null) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   198
            log = new PlatformLogger(name);
7803
56bc97d69d93 6880112: Project Coin: Port JDK core library code to use diamond operator
smarks
parents: 7026
diff changeset
   199
            loggers.put(name, new WeakReference<>(log));
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   200
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   201
        return log;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   202
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   203
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   204
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   205
     * Initialize java.util.logging.Logger objects for all platform loggers.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   206
     * This method is called from LogManager.readPrimordialConfiguration().
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   207
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   208
    public static synchronized void redirectPlatformLoggers() {
4172
bceea7bc12b7 6876135: Add PlatformLoggingMXBean to eliminate the dependency on JMX from logging
mchung
parents: 3866
diff changeset
   209
        if (loggingEnabled || !LoggingSupport.isAvailable()) return;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   210
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   211
        loggingEnabled = true;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   212
        for (Map.Entry<String, WeakReference<PlatformLogger>> entry : loggers.entrySet()) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   213
            WeakReference<PlatformLogger> ref = entry.getValue();
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   214
            PlatformLogger plog = ref.get();
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   215
            if (plog != null) {
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   216
                plog.redirectToJavaLoggerProxy();
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   217
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   218
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   219
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   220
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   221
    /**
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   222
     * Creates a new JavaLoggerProxy and redirects the platform logger to it
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   223
     */
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   224
    private void redirectToJavaLoggerProxy() {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   225
        DefaultLoggerProxy lp = DefaultLoggerProxy.class.cast(this.loggerProxy);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   226
        JavaLoggerProxy jlp = new JavaLoggerProxy(lp.name, lp.level);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   227
        // the order of assignments is important
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   228
        this.javaLoggerProxy = jlp;   // isLoggable checks javaLoggerProxy if set
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   229
        this.loggerProxy = jlp;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   230
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   231
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   232
    // DefaultLoggerProxy may be replaced with a JavaLoggerProxy object
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   233
    // when the java.util.logging facility is enabled
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   234
    private volatile LoggerProxy loggerProxy;
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   235
    // javaLoggerProxy is only set when the java.util.logging facility is enabled
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   236
    private volatile JavaLoggerProxy javaLoggerProxy;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   237
    private PlatformLogger(String name) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   238
        if (loggingEnabled) {
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   239
            this.loggerProxy = this.javaLoggerProxy = new JavaLoggerProxy(name);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   240
        } else {
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   241
            this.loggerProxy = new DefaultLoggerProxy(name);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   242
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   243
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   244
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   245
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   246
     * A convenience method to test if the logger is turned off.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   247
     * (i.e. its level is OFF).
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   248
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   249
    public boolean isEnabled() {
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   250
        return loggerProxy.isEnabled();
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   251
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   252
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   253
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   254
     * Gets the name for this platform logger.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   255
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   256
    public String getName() {
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   257
        return loggerProxy.name;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   258
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   259
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   260
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   261
     * Returns true if a message of the given level would actually
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   262
     * be logged by this logger.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   263
     */
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   264
    public boolean isLoggable(Level level) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   265
        if (level == null) {
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   266
            throw new NullPointerException();
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   267
        }
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   268
        // performance-sensitive method: use two monomorphic call-sites
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   269
        JavaLoggerProxy jlp = javaLoggerProxy;
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   270
        return jlp != null ? jlp.isLoggable(level) : loggerProxy.isLoggable(level);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   271
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   272
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   273
    /**
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   274
     * Get the log level that has been specified for this PlatformLogger.
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   275
     * The result may be null, which means that this logger's
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   276
     * effective level will be inherited from its parent.
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   277
     *
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   278
     * @return  this PlatformLogger's level
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   279
     */
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   280
    public Level level() {
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   281
        return loggerProxy.getLevel();
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   282
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   283
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   284
    /**
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   285
     * Set the log level specifying which message levels will be
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   286
     * logged by this logger.  Message levels lower than this
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   287
     * value will be discarded.  The level value {@link #OFF}
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   288
     * can be used to turn off logging.
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   289
     * <p>
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   290
     * If the new level is null, it means that this node should
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   291
     * inherit its level from its nearest ancestor with a specific
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   292
     * (non-null) level value.
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   293
     *
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   294
     * @param newLevel the new value for the log level (may be null)
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   295
     */
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   296
    public void setLevel(Level newLevel) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   297
        loggerProxy.setLevel(newLevel);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   298
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   299
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   300
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   301
     * Logs a SEVERE message.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   302
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   303
    public void severe(String msg) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   304
        loggerProxy.doLog(Level.SEVERE, msg);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   305
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   306
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   307
    public void severe(String msg, Throwable t) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   308
        loggerProxy.doLog(Level.SEVERE, msg, t);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   309
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   310
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   311
    public void severe(String msg, Object... params) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   312
        loggerProxy.doLog(Level.SEVERE, msg, params);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   313
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   314
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   315
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   316
     * Logs a WARNING message.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   317
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   318
    public void warning(String msg) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   319
        loggerProxy.doLog(Level.WARNING, msg);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   320
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   321
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   322
    public void warning(String msg, Throwable t) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   323
        loggerProxy.doLog(Level.WARNING, msg, t);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   324
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   325
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   326
    public void warning(String msg, Object... params) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   327
        loggerProxy.doLog(Level.WARNING, msg, params);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   328
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   329
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   330
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   331
     * Logs an INFO message.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   332
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   333
    public void info(String msg) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   334
        loggerProxy.doLog(Level.INFO, msg);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   335
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   336
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   337
    public void info(String msg, Throwable t) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   338
        loggerProxy.doLog(Level.INFO, msg, t);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   339
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   340
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   341
    public void info(String msg, Object... params) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   342
        loggerProxy.doLog(Level.INFO, msg, params);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   343
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   344
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   345
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   346
     * Logs a CONFIG message.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   347
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   348
    public void config(String msg) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   349
        loggerProxy.doLog(Level.CONFIG, msg);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   350
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   351
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   352
    public void config(String msg, Throwable t) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   353
        loggerProxy.doLog(Level.CONFIG, msg, t);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   354
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   355
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   356
    public void config(String msg, Object... params) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   357
        loggerProxy.doLog(Level.CONFIG, msg, params);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   358
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   359
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   360
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   361
     * Logs a FINE message.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   362
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   363
    public void fine(String msg) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   364
        loggerProxy.doLog(Level.FINE, msg);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   365
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   366
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   367
    public void fine(String msg, Throwable t) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   368
        loggerProxy.doLog(Level.FINE, msg, t);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   369
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   370
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   371
    public void fine(String msg, Object... params) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   372
        loggerProxy.doLog(Level.FINE, msg, params);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   373
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   374
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   375
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   376
     * Logs a FINER message.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   377
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   378
    public void finer(String msg) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   379
        loggerProxy.doLog(Level.FINER, msg);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   380
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   381
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   382
    public void finer(String msg, Throwable t) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   383
        loggerProxy.doLog(Level.FINER, msg, t);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   384
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   385
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   386
    public void finer(String msg, Object... params) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   387
        loggerProxy.doLog(Level.FINER, msg, params);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   388
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   389
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   390
    /**
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   391
     * Logs a FINEST message.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   392
     */
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   393
    public void finest(String msg) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   394
        loggerProxy.doLog(Level.FINEST, msg);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   395
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   396
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   397
    public void finest(String msg, Throwable t) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   398
        loggerProxy.doLog(Level.FINEST, msg, t);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   399
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   400
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   401
    public void finest(String msg, Object... params) {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   402
        loggerProxy.doLog(Level.FINEST, msg, params);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   403
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   404
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   405
    /**
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   406
     * Abstract base class for logging support, defining the API and common field.
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   407
     */
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   408
    private static abstract class LoggerProxy {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   409
        final String name;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   410
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   411
        protected LoggerProxy(String name) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   412
            this.name = name;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   413
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   414
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   415
        abstract boolean isEnabled();
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   416
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   417
        abstract Level getLevel();
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   418
        abstract void setLevel(Level newLevel);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   419
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   420
        abstract void doLog(Level level, String msg);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   421
        abstract void doLog(Level level, String msg, Throwable thrown);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   422
        abstract void doLog(Level level, String msg, Object... params);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   423
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   424
        abstract boolean isLoggable(Level level);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   425
    }
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   426
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   427
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   428
    private static final class DefaultLoggerProxy extends LoggerProxy {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   429
        /**
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   430
         * Default platform logging support - output messages to System.err -
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   431
         * equivalent to ConsoleHandler with SimpleFormatter.
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   432
         */
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   433
        private static PrintStream outputStream() {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   434
            return System.err;
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   435
        }
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   436
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   437
        volatile Level effectiveLevel; // effective level (never null)
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   438
        volatile Level level;          // current level set for this node (may be null)
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   439
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   440
        DefaultLoggerProxy(String name) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   441
            super(name);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   442
            this.effectiveLevel = deriveEffectiveLevel(null);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   443
            this.level = null;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   444
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   445
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   446
        boolean isEnabled() {
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   447
            return effectiveLevel != Level.OFF;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   448
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   449
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   450
        Level getLevel() {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   451
            return level;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   452
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   453
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   454
        void setLevel(Level newLevel) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   455
            Level oldLevel = level;
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   456
            if (oldLevel != newLevel) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   457
                level = newLevel;
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   458
                effectiveLevel = deriveEffectiveLevel(newLevel);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   459
            }
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   460
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   461
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   462
        void doLog(Level level, String msg) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   463
            if (isLoggable(level)) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   464
                outputStream().print(format(level, msg, null));
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   465
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   466
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   467
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   468
        void doLog(Level level, String msg, Throwable thrown) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   469
            if (isLoggable(level)) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   470
                outputStream().print(format(level, msg, thrown));
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   471
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   472
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   473
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   474
        void doLog(Level level, String msg, Object... params) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   475
            if (isLoggable(level)) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   476
                String newMsg = formatMessage(msg, params);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   477
                outputStream().print(format(level, newMsg, null));
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   478
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   479
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   480
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   481
        boolean isLoggable(Level level) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   482
            Level effectiveLevel = this.effectiveLevel;
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   483
            return level.intValue() >= effectiveLevel.intValue() && effectiveLevel != Level.OFF;
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   484
        }
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   485
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   486
        // derive effective level (could do inheritance search like j.u.l.Logger)
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   487
        private Level deriveEffectiveLevel(Level level) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   488
            return level == null ? DEFAULT_LEVEL : level;
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   489
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   490
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   491
        // Copied from java.util.logging.Formatter.formatMessage
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   492
        private String formatMessage(String format, Object... parameters) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   493
            // Do the formatting.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   494
            try {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   495
                if (parameters == null || parameters.length == 0) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   496
                    // No parameters.  Just return format string.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   497
                    return format;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   498
                }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   499
                // Is it a java.text style format?
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   500
                // Ideally we could match with
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   501
                // Pattern.compile("\\{\\d").matcher(format).find())
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   502
                // However the cost is 14% higher, so we cheaply check for
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   503
                // 1 of the first 4 parameters
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   504
                if (format.indexOf("{0") >= 0 || format.indexOf("{1") >=0 ||
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   505
                            format.indexOf("{2") >=0|| format.indexOf("{3") >=0) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   506
                    return java.text.MessageFormat.format(format, parameters);
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   507
                }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   508
                return format;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   509
            } catch (Exception ex) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   510
                // Formatting failed: use format string.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   511
                return format;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   512
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   513
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   514
9014
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   515
        private static final String formatString =
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   516
            LoggingSupport.getSimpleFormat(false); // don't check logging.properties
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   517
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   518
        // minimize memory allocation
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   519
        private Date date = new Date();
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   520
        private synchronized String format(Level level, String msg, Throwable thrown) {
9014
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   521
            date.setTime(System.currentTimeMillis());
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   522
            String throwable = "";
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   523
            if (thrown != null) {
9014
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   524
                StringWriter sw = new StringWriter();
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   525
                PrintWriter pw = new PrintWriter(sw);
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   526
                pw.println();
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   527
                thrown.printStackTrace(pw);
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   528
                pw.close();
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   529
                throwable = sw.toString();
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   530
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   531
9014
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   532
            return String.format(formatString,
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   533
                                 date,
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   534
                                 getCallerInfo(),
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   535
                                 name,
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   536
                                 level.name(),
9014
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   537
                                 msg,
117374ccf1b7 6381464: SimpleFormatter should use one single line format
mchung
parents: 8512
diff changeset
   538
                                 throwable);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   539
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   540
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   541
        // Returns the caller's class and method's name; best effort
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   542
        // if cannot infer, return the logger's name.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   543
        private String getCallerInfo() {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   544
            String sourceClassName = null;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   545
            String sourceMethodName = null;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   546
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   547
            JavaLangAccess access = SharedSecrets.getJavaLangAccess();
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   548
            Throwable throwable = new Throwable();
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   549
            int depth = access.getStackTraceDepth(throwable);
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   550
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   551
            String logClassName = "sun.util.logging.PlatformLogger";
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   552
            boolean lookingForLogger = true;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   553
            for (int ix = 0; ix < depth; ix++) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   554
                // Calling getStackTraceElement directly prevents the VM
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   555
                // from paying the cost of building the entire stack frame.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   556
                StackTraceElement frame =
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   557
                    access.getStackTraceElement(throwable, ix);
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   558
                String cname = frame.getClassName();
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   559
                if (lookingForLogger) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   560
                    // Skip all frames until we have found the first logger frame.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   561
                    if (cname.equals(logClassName)) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   562
                        lookingForLogger = false;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   563
                    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   564
                } else {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   565
                    if (!cname.equals(logClassName)) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   566
                        // We've found the relevant frame.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   567
                        sourceClassName = cname;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   568
                        sourceMethodName = frame.getMethodName();
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   569
                        break;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   570
                    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   571
                }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   572
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   573
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   574
            if (sourceClassName != null) {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   575
                return sourceClassName + " " + sourceMethodName;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   576
            } else {
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   577
                return name;
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   578
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   579
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   580
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   581
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   582
    /**
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   583
     * JavaLoggerProxy forwards all the calls to its corresponding
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   584
     * java.util.logging.Logger object.
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   585
     */
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   586
    private static final class JavaLoggerProxy extends LoggerProxy {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   587
        // initialize javaLevel fields for mapping from Level enum -> j.u.l.Level object
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   588
        static {
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   589
            for (Level level : Level.values()) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   590
                level.javaLevel = LoggingSupport.parseLevel(level.name());
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   591
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   592
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   593
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   594
        private final /* java.util.logging.Logger */ Object javaLogger;
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   595
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   596
        JavaLoggerProxy(String name) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   597
            this(name, null);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   598
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   599
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   600
        JavaLoggerProxy(String name, Level level) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   601
            super(name);
4172
bceea7bc12b7 6876135: Add PlatformLoggingMXBean to eliminate the dependency on JMX from logging
mchung
parents: 3866
diff changeset
   602
            this.javaLogger = LoggingSupport.getLogger(name);
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   603
            if (level != null) {
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   604
                // level has been updated and so set the Logger's level
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   605
                LoggingSupport.setLevel(javaLogger, level.javaLevel);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   606
            }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   607
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   608
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   609
        void doLog(Level level, String msg) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   610
            LoggingSupport.log(javaLogger, level.javaLevel, msg);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   611
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   612
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   613
        void doLog(Level level, String msg, Throwable t) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   614
            LoggingSupport.log(javaLogger, level.javaLevel, msg, t);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   615
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   616
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   617
        void doLog(Level level, String msg, Object... params) {
12526
c4838d55279c 7163898: add isLoggable() check to doLog()
anthony
parents: 9050
diff changeset
   618
            if (!isLoggable(level)) {
c4838d55279c 7163898: add isLoggable() check to doLog()
anthony
parents: 9050
diff changeset
   619
                return;
c4838d55279c 7163898: add isLoggable() check to doLog()
anthony
parents: 9050
diff changeset
   620
            }
8512
fde784daa420 7020522: Need to reapply the fix for 6664512
dcherepanov
parents: 7816
diff changeset
   621
            // only pass String objects to the j.u.l.Logger which may
fde784daa420 7020522: Need to reapply the fix for 6664512
dcherepanov
parents: 7816
diff changeset
   622
            // be created by untrusted code
fde784daa420 7020522: Need to reapply the fix for 6664512
dcherepanov
parents: 7816
diff changeset
   623
            int len = (params != null) ? params.length : 0;
fde784daa420 7020522: Need to reapply the fix for 6664512
dcherepanov
parents: 7816
diff changeset
   624
            Object[] sparams = new String[len];
fde784daa420 7020522: Need to reapply the fix for 6664512
dcherepanov
parents: 7816
diff changeset
   625
            for (int i = 0; i < len; i++) {
fde784daa420 7020522: Need to reapply the fix for 6664512
dcherepanov
parents: 7816
diff changeset
   626
                sparams [i] = String.valueOf(params[i]);
fde784daa420 7020522: Need to reapply the fix for 6664512
dcherepanov
parents: 7816
diff changeset
   627
            }
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   628
            LoggingSupport.log(javaLogger, level.javaLevel, msg, sparams);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   629
        }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   630
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   631
        boolean isEnabled() {
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   632
            return LoggingSupport.isLoggable(javaLogger, Level.OFF.javaLevel);
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   633
        }
3866
34cd368bd2dd 6882384: Update http protocol handler to use PlatformLogger
chegar
parents: 3861
diff changeset
   634
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   635
        /**
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   636
         * Returns the PlatformLogger.Level mapped from j.u.l.Level
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   637
         * set in the logger.  If the j.u.l.Logger is set to a custom Level,
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   638
         * this method will return the nearest Level.
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   639
         */
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   640
        Level getLevel() {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   641
            Object javaLevel = LoggingSupport.getLevel(javaLogger);
16736
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   642
            if (javaLevel == null) return null;
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   643
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   644
            try {
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   645
                return Level.valueOf(LoggingSupport.getLevelName(javaLevel));
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   646
            } catch (IllegalArgumentException e) {
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   647
                return Level.valueOf(LoggingSupport.getLevelValue(javaLevel));
f1e17f49191a 8011380: FX dependency on PlatformLogger broken by 8010309
mchung
parents: 16721
diff changeset
   648
            }
16721
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   649
        }
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   650
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   651
        void setLevel(Level level) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   652
            LoggingSupport.setLevel(javaLogger, level == null ? null : level.javaLevel);
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   653
        }
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   654
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   655
        boolean isLoggable(Level level) {
23adec24015f 8010309: Improve PlatformLogger.isLoggable performance by direct mapping from an integer to Level
mchung
parents: 14342
diff changeset
   656
            return LoggingSupport.isLoggable(javaLogger, level.javaLevel);
3866
34cd368bd2dd 6882384: Update http protocol handler to use PlatformLogger
chegar
parents: 3861
diff changeset
   657
        }
3861
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   658
    }
a98a057ec335 6882376: Add internal support for JRE implementation to eliminate the dependency on logging
mchung
parents:
diff changeset
   659
}