在我的Java应用程序的首选项中,他们可以将调试级别设置为包含七个默认级别的JComboBox。该列表包含SEVERE,WARNING,INFO ecetera,相当丑陋而且Id替换为“严重,警告”的英语。
java日志记录中使用的java.util.logging.Level具有可以使用不同资源包的构造函数,因此我想到了子类化Level,以便我可以将资源包定制到我自己的资源包中。但是如何让java日志记录使用修改后的级别
修改
使用kans回答
中给出的示例类的修改版本class LevelItem extends Object
{
public final Level level;
public LevelItem(Level level)
{
this.level = level;
}
public String toString()
{
return level.getLocalizedName().substring(0,1)+
level.getLocalizedName().substring(1).toLowerCase();
}
public boolean equals(Object obj)
{
return (obj instanceof LevelItem &&
(this.level.equals((((LevelItem) obj).level))));
}
}
但需要添加equals方法,因此setSelectedItem()在combobox
中适用于我即
debugLevelCombo = new JComboBox();
debugLevelCombo.addItem(new LevelItem(Level.SEVERE));
debugLevelCombo.addItem(new LevelItem(Level.WARNING));
debugLevelCombo.addItem(new LevelItem(Level.INFO));
debugLevelCombo.addItem(new LevelItem(Level.CONFIG));
debugLevelCombo.addItem(new LevelItem(Level.FINE));
debugLevelCombo.addItem(new LevelItem(Level.FINER));
debugLevelCombo.addItem(new LevelItem(Level.FINEST));
debugLevelCombo.setSelectedItem(new
LevelItem(Level.parse(UserPreferences.getInstance().getDebugLevel())));
答案 0 :(得分:4)
您不得更改“java”包中的类。它是JDK的一部分。显然它不是GUI的选项。只需了解更多如何使用JComboBox以不同方式呈现值。例如。你可以创建一个包装类:
class LevelItem
{
private final Level level;
public LevelItem(Level level) {this.level=level;}
public String toString()
{
if(Level.WARNING.equals(level) return "Warning";
if(Level.INFO.equals(level) return "Information";
...
}
}
}
并将其用于组合框值。或者也许可以制作自定义渲染器。这是如何创建自定义rednerer的示例:How to use Map element as text of a JComboBox
答案 1 :(得分:1)
Level中的每个日志记录级别都有一个对应的int。如果您想要过滤要记录的事件级别,可以尝试一些很长的行,
if (event.getLevel().intValue() > Level.INFO.intValue()) {
event.log();
}
这将只记录警告和严重。
如果你想改变这些级别的值,我猜你可以创建你自己的类MyLevels,其中包含Level的静态实例和你想要的值。