2017-05-31 36 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