我的目标是使用java.util.logging Level类并将Level字符串更改为'VERBOSE'。
public static final Level FINE = new Level("FINE", 500);
我知道我们可以通过扩展Level来实现这一目的:
public class MyLogLevel extends Level {
private static final long serialVersionUID = -8176160795706313070L;
private static final Level FINE = new MyLogLevel("VERBOSE", 500);
protected MyLogLevel(String name, int level) {
super(name, level);
}
}
我想知道,这是做这件事的好方法,还是有更好的方法去做。
答案 0 :(得分:0)
如果您正在运行Oracle JDK或OpenJDK,则可以简单地覆盖现有级别的本地化名称。您可以通过在包sun.util.logging.resources
下创建新的资源包(属性文件或资源包类)来完成此操作。 bundle name必须采用logging_LANG_COUNTRY
。
例如,这是一个名为LevelTest
的项目下的测试程序:
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.logging.Level;
public class NewLevels {
public static void main(String[] args) {
System.out.println(Locale.getDefault());
ResourceBundle rb = ResourceBundle.getBundle("sun.util.logging.resources.logging");
System.out.println(rb.getLocale());
System.out.println(Level.FINE.getLocalizedName());
System.out.println(Level.FINER.getLocalizedName());
System.out.println(Level.FINEST.getLocalizedName());
}
}
执行此测试时,打印的区域设置为en_US
。因此,我的资源包名称将为logging_en_US.properties
。
属性资源包将包含以下内容:
FINE=VERBOSE
FINER=VERBOSE
FINEST=VERBOSE
以下是项目结构清单:
%USERPROFILE%\Documents\Projects\LevelTest\src\NewLevels.java
%USERPROFILE%\Documents\Projects\LevelTest\src\sun\util\logging\resources\logging_en_US.properties
当我运行程序时,我得到以下输出:
en_US
en_US
VERBOSE
VERBOSE
VERBOSE
在较大的项目中,您可能必须解决一些类加载器问题,以确保找到正确的资源包。
或者,如果您不想这样做,可以求助于创建custom formatter。