我正在尝试接受带有一些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;
不起作用。任何帮助将不胜感激。
答案 0 :(得分:0)
你可以使用loglevel = Level.parse(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));