2017-05-31 278 views
0

我有一個全局記錄器,在幾個類中使用,這樣我就可以將一切記錄在一個文件中。所有的作品都很好,但我希望能夠從UI中禁用Logger。我試着將Level設置爲OFF,如下圖所示,這會停止日誌記錄,但仍然會創建一個空的日誌文件(我正在使用File Appender和Logger)。log4j2日誌文件即使在Level爲OFF時也會創建?

有沒有什麼簡單的方法可以避免在Level關閉時創建日誌文件?

public class Main { 
    public static Logger LOGGER = LogManager.getLogger("GLOBAL"); 
    public static void main(String[] args) { 
     Configurator.setLevel("GLOBAL", Level.OFF); 
     //Rest of code 

    } 
} 

回答

2

LogManager.getLogger("GLOBAL")在讀取log4j配置並初始化時創建日誌文件。所以,當你在Configurator.setLevel("GLOBAL", Level.OFF);時,你無法阻止它做到這一點。國際海事組織,你有2個選項:

1)優雅的方式:通過在運行時LogManager.getLogManager().readConfiguration傳遞配置在您的代碼中初始化LogManager。你可以參考here的詳細實施。

2)醜陋的方式:刪除日誌文件,當您設置LEVEL.OFF

+0

我試圖避免我將如何傳遞運行時配置文件等的變化? LogManager.getLogManager()此方法似乎不是log4j.LogManager的一部分。我目前使用log4j2.xml進行配置,我發現有幾種方法可以在運行時編輯配置,但所有這些方法對於我想實現的目標來說似乎都是過分的。 – martini

+0

首先,您爲什麼擔心文件在那裏關閉了關卡?我個人不會擔心。我同意它對你正在嘗試做的事情的矯枉過正。如果這是你想要的方式,看看這裏的例子http://www.nailedtothex.org/roller/kyle/entry/java-util-logging-programmatic-configuration – YuVi

+0

是的,這是越來越複雜,我想我會現在就刪除文件... – martini