簡體   English   中英

在java中使用字符串值更改日志級別

[英]Change log level with String value in java

我正在嘗試接收帶有一些字符串值(“信息、警告等)的請求,以更改我的應用程序日志級別。目前,我只有 10 個連續的 if-else 語句......

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

我將所有可能的級別放入一個字符串數組中。 但是,我不知道如何從字符串設置日志級別。 我看到的唯一方法是執行一系列 if-else 塊來明確聲明 logLevel = Level.INFO 輸入的任何級別。 做類似的事情

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

不起作用。 任何幫助,將不勝感激。

你可以在那里使用你的第二個代碼段loglevel = Level.parse(level) ,我認為應該這樣做。

級別的 Java 文檔

或者,代替字符串輸入,為什么不讓該方法直接采用 Level 呢? 如果您確實需要將其作為字符串存儲在某處,則可以執行Level.info.getName()來獲取名稱,然后使用上面的 parse 從該字符串中獲取級別。 避免在那里進行驗證,因為輸入的唯一可能性是正確的級別。

對於 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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM