Java创建日志文件java0.log
并锁定/root
文件夹
可以使用LogManager.reset()
函数禁用此行为,但我想根据某些配置参数调用此函数。
任何人都可以建议我可以使用哪个配置文件来执行此操作以及如何实现此目的?
答案 0 :(得分:0)
使用java.util.logging.config.file系统属性并将其指向NUL device。
在Windows上:
-Djava.util.logging.config.file=NUL
在Linux上:
-Djava.util.logging.config.file=/dev/null
在任何平台上,您只需创建一个空文件并指向它即可。
这样做是在启动时使用给定的文件路径(流)调用LogManager.readConfiguration()。根据合同,这种方法将:
重新初始化日志记录属性并重新读取日志记录配置
当它读取日志记录配置时,没有要读取的新数据。因此,这就好像它只是在启动时调用LogManager.reset()。
如果您希望在根记录器上有更多选择性行为,那么您可以编写自定义类并使用java.util.logging.config.class
属性:
package foo.bar;
import java.io.FileInputStream;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public final class LogConfig {
public LogConfig() throws Throwable {
//Load the default config file.
String file = System.getProperty("java.util.logging.config.file");
if (file != null) {
LogManager.getLogManager().readConfiguration(new FileInputStream(file));
}
//Modify the logger tree if property is set.
String key = "some.config.property";
String v = System.getProperty(key);
if (v == null) {
throw new NullPointerException("System property '"
+ key + "' was not defined");
}
if (Boolean.parseBoolean(v)) {
Logger root = Logger.getLogger("");
for (Handler h : root.getHandlers()) {
if (h instanceof FileHandler) {
root.removeHandler(h);
h.close();
}
}
}
}
}
要使用此类,请设置以下命令行属性:
-Djava.util.logging.config.file=/path/to/file -Djava.util.logging.config.class=foo.bar.LogConfig -Dsome.config.property=true