2 回答

TA貢獻1775條經驗 獲得超8個贊
不應該為根 Logger 設置級別也為根 Logger 的所有子記錄器設置級別嗎?
不,顯然您正在創建一個新的 Logger 對象。getLogger 的 Javadoc狀態:
如果創建了一個新的記錄器,它的日志級別將基于 LogManager 配置進行配置,并且它還將配置為將日志輸出發送到其父處理程序。
請注意,即使之前有一個同名的 Logger 對象,您也不能依賴getLogger返回相同的對象,因為如果沒有對該對象的強引用,它可能已被垃圾回收。
如果您的目標是在項目中創建具有相同日志級別的所有 Logger 對象,則不應以編程方式進行,而應通過配置進行。這就是java.util.logging派上用場的地方??傮w優勢是您可以在不同的日志級別運行應用程序,甚至無需更改一行代碼。
只需編輯您的配置文件(本質上就是上面提到的LogManager configuration)。它被調用logging.properties并位于您的 JRE 目錄中。在那里您可以編輯最后一段并配置項目范圍或類縮小的日志級別:
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
myProject.MyClass.level = FINE
myProject.MyOtherNotSoImportantClass.level = INFO
mySecondProject.MainClass.level = NONE
一個更好的解決方案是復制logging.properties到您的項目目錄并調用您的應用程序
java -Djava.util.logging.config.file=./src/test/resources/logging.properties

TA貢獻1775條經驗 獲得超11個贊
接受的答案是完全有效的,我完全同意。
也就是說,我想補充一點知識……隨心所欲。
private static final Logger JAVA_LOG = Logger.getLogger(MyClass.class.getName());
static { JAVA_LOG.setLevel(null); }
這將告訴它繼承其祖先日志級別。Logger.setLevel() javadoc
如果新級別為空,則意味著此節點應從其最近的祖先處繼承其級別,并具有特定的(非空)級別值。
添加回答
舉報