mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
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
2 changed files with 35 additions and 9 deletions
|
@ -389,14 +389,15 @@ public class Level implements java.io.Serializable {
|
||||||
try {
|
try {
|
||||||
int x = Integer.parseInt(name);
|
int x = Integer.parseInt(name);
|
||||||
level = KnownLevel.findByValue(x, KnownLevel::mirrored);
|
level = KnownLevel.findByValue(x, KnownLevel::mirrored);
|
||||||
if (!level.isPresent()) {
|
if (level.isPresent()) {
|
||||||
// add new Level
|
return level.get();
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
// 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) {
|
} catch (NumberFormatException ex) {
|
||||||
// Not an integer.
|
// Not an integer.
|
||||||
// Drop through.
|
// Drop through.
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.lang.management.ManagementFactory;
|
||||||
|
import java.lang.management.PlatformLoggingMXBean;
|
||||||
import java.lang.ref.Reference;
|
import java.lang.ref.Reference;
|
||||||
import java.lang.ref.ReferenceQueue;
|
import java.lang.ref.ReferenceQueue;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
@ -35,9 +37,11 @@ import java.util.logging.*;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @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
|
* @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
|
* @run main/othervm CustomLevel
|
||||||
*/
|
*/
|
||||||
|
@ -73,6 +77,8 @@ public class CustomLevel extends Level {
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
setupCustomLevels();
|
setupCustomLevels();
|
||||||
setUpCustomLevelsOtherLoader();
|
setUpCustomLevelsOtherLoader();
|
||||||
|
PlatformLoggingMXBean mxbean = ManagementFactory.getPlatformMXBean(PlatformLoggingMXBean.class);
|
||||||
|
Logger logger = Logger.getLogger("foo.bar");
|
||||||
|
|
||||||
// Level.parse will return the custom Level instance
|
// Level.parse will return the custom Level instance
|
||||||
for (Level level : levels) {
|
for (Level level : levels) {
|
||||||
|
@ -96,8 +102,27 @@ public class CustomLevel extends Level {
|
||||||
+ l.getClass() + " for " + localizedName
|
+ l.getClass() + " for " + localizedName
|
||||||
+ " in " + rb.getBaseBundleName());
|
+ " 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()
|
final long otherLevelCount = levels.stream()
|
||||||
.filter(CustomLevel::isCustomLoader)
|
.filter(CustomLevel::isCustomLoader)
|
||||||
.count();
|
.count();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue