使用java

时间:2018-06-13 19:16:21

标签: java logging

我正在尝试接受带有一些String值的请求(“Info,Warning等”)以更改我的应用程序级别的日志记录。目前,我只有10个连续的if-else语句... < / p>

public static void setLevel(String level) throws IOException {
    level = level.toUpperCase();
    if (level.equals("ALL")) {
        log("Log level set to ALL");
        saveLevel("ALL");
        logLevel = Level.ALL;
    } else if (level.equals("CONFIG")) {
        log("Log level set to CONFIG");
        saveLevel("CONFIG");
        logLevel = Level.CONFIG;
    } else if (level.equals("FINE")) {
        log("Log level set to FINE");
        saveLevel("FINE");
        logLevel = Level.FINE;

等等。每个块都将更改记录到我的日志文件中,将级别保存回文件,以便下次应用程序启动时可以读取,并更改实际日志级别。必须有一个更简洁的方法来做到这一点。我试过使用以下代码

public static void setLevel(String level) throws SecurityException, IOException {
    level = level.toUpperCase();
    String[] levels = {"ALL", "CONFIG", "FINE", "FINER", "FINEST", "INFO", "SEVERE", "WARNING", "OFF"};
    if(Arrays.asList(levels).contains(level)) {
        log("Log level set to " + level);
        saveLevel(level);
        logLevel = Level.level;
    }
}

我将所有可能的级别放入String数组中。但是,我不知道如何从String设置日志级别。我看到的唯一方法是执行一系列if-else块,以便在输入的任何级别明确指出logLevel = Level.INFO。做点什么

String info = "INFO";
logLevel = Level.info;

不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

你可以使用loglevel = Level.parse(level)使用你的第二个代码段,我认为应该这样做。

Java Docs on Level

或者,为什么不让方法直接采用Level,而不是字符串输入?如果你真的需要将它作为字符串存储在某处,你可以Level.info.getName()获取名称,然后使用上面的解析从该字符串中获取级别。避免验证,因为输入的唯一可能性是适当的水平。

答案 1 :(得分:0)

对于log4j2版本2.4或2.4+ 我们可以使用 Configurator 类,以String值更改日志级别,如下所示:

// choose any level
String level = "info";

// org.apache.logging.log4j.core.config.Configurator;
Configurator.setLevel("com.example.Foo", Level.toLevel(level));

// You can also set the root logger:
Configurator.setRootLevel(Level.toLevel(level));