【问题标题】:Best way to override java.util.logging Level class to change the level strings覆盖 java.util.logging 级别类以更改级别字符串的最佳方法
【发布时间】:2017-06-29 14:12:01
【问题描述】:

我的目标是使用 java.util.logging Level 类并将 Level 字符串(如“FINE”)更改为“VERBOSE”。

public static final Level FINE = new Level("FINE", 500);

我知道我们可以通过如下扩展关卡来做到这一点:

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);
    }


}

我想知道,这是做这件事的好方法还是有更好的方法。

【问题讨论】:

  • 看起来不错。你有错误的问题吗?
  • 不会是直接使用Level.FINE的库代码不会被替换吧?你为什么要首先替换那些字符串?

标签: java java.util.logging


【解决方案1】:

如果您正在运行 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

【讨论】:

    猜你喜欢
    • 2012-06-29
    • 2010-09-28
    • 2011-11-29
    • 2016-08-04
    • 1970-01-01
    • 2018-04-06
    • 2016-02-07
    • 2020-07-11
    • 1970-01-01
    相关资源
    最近更新 更多