8187073: The java.util.logging.Level.findLevel() will not correctly find a Level by it's int value
Reviewed-by: rriggs
This commit is contained in:
parent
82bf0799c6
commit
eb62b5e51e
src/java.logging/share/classes/java/util/logging
test/jdk/java/util/logging/Level
@ -389,14 +389,15 @@ public class Level implements java.io.Serializable {
|
||||
try {
|
||||
int x = Integer.parseInt(name);
|
||||
level = KnownLevel.findByValue(x, KnownLevel::mirrored);
|
||||
if (!level.isPresent()) {
|
||||
// add new Level
|
||||
Level levelObject = new Level(name, x);
|
||||
// There's no need to use a reachability fence here because
|
||||
// KnownLevel keeps a strong reference on the level when
|
||||
// level.getClass() == Level.class.
|
||||
return KnownLevel.findByValue(x, KnownLevel::mirrored).get();
|
||||
if (level.isPresent()) {
|
||||
return level.get();
|
||||
}
|
||||
// add new Level
|
||||
Level levelObject = new Level(name, x);
|
||||
// There's no need to use a reachability fence here because
|
||||
// KnownLevel keeps a strong reference on the level when
|
||||
// level.getClass() == Level.class.
|
||||
return KnownLevel.findByValue(x, KnownLevel::mirrored).get();
|
||||
} catch (NumberFormatException ex) {
|
||||
// Not an integer.
|
||||
// Drop through.
|
||||
|
@ -22,6 +22,8 @@
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.lang.management.PlatformLoggingMXBean;
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.WeakReference;
|
||||
@ -35,9 +37,11 @@ import java.util.logging.*;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8026027 6543126
|
||||
* @bug 8026027 6543126 8187073
|
||||
* @modules java.logging
|
||||
* java.management
|
||||
* @summary Test Level.parse to look up custom levels by name and its
|
||||
* localized name
|
||||
* localized name, as well as severity.
|
||||
*
|
||||
* @run main/othervm CustomLevel
|
||||
*/
|
||||
@ -73,6 +77,8 @@ public class CustomLevel extends Level {
|
||||
public static void main(String[] args) throws Exception {
|
||||
setupCustomLevels();
|
||||
setUpCustomLevelsOtherLoader();
|
||||
PlatformLoggingMXBean mxbean = ManagementFactory.getPlatformMXBean(PlatformLoggingMXBean.class);
|
||||
Logger logger = Logger.getLogger("foo.bar");
|
||||
|
||||
// Level.parse will return the custom Level instance
|
||||
for (Level level : levels) {
|
||||
@ -96,8 +102,27 @@ public class CustomLevel extends Level {
|
||||
+ l.getClass() + " for " + localizedName
|
||||
+ " in " + rb.getBaseBundleName());
|
||||
}
|
||||
l = Level.parse(String.valueOf(level.intValue()));
|
||||
System.out.println("Level.parse(" + level.intValue() + ") returns " + l);
|
||||
if (l != level) {
|
||||
if (l == null || l.intValue() != level.intValue()) {
|
||||
throw new RuntimeException("Unexpected level " + l
|
||||
+ (l == null ? "" : (" " + l.getClass()))
|
||||
+ " for " + level.intValue());
|
||||
}
|
||||
}
|
||||
mxbean.setLoggerLevel(logger.getName(), String.valueOf(level.intValue()));
|
||||
Level l2 = logger.getLevel();
|
||||
if (l2 != level) {
|
||||
if (l2 == null || l2.intValue() != level.intValue()) {
|
||||
throw new RuntimeException("Unexpected level " + l2
|
||||
+ (l2 == null ? "" : (" " + l2.getClass()))
|
||||
+ " for " + level.intValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
final long otherLevelCount = levels.stream()
|
||||
.filter(CustomLevel::isCustomLoader)
|
||||
.count();
|
||||
|
Loading…
x
Reference in New Issue
Block a user