对于不太长的行,FileHandler可以正常工作。但是,如果行很长,则不会向日志文件写入任何内容。例如,下面是试图编写一行50k字符的代码:
public class LoggerExample {
private static final Logger LOGGER = Logger.getLogger(LoggerExample.class.getName());
public static void main(String[] args) throws SecurityException, IOException {
FileHandler fileHandler = new FileHandler();
fileHandler.setFormatter(new SimpleFormatter());
LOGGER.addHandler(fileHandler);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5000; i++) {
sb.append("aaaaaaaaaa");
}
LOGGER.info(sb.toString());
}
}有办法让这件事成功吗?
发布于 2021-12-08 20:39:07
FileHandler有一个限制,如其文档中所描述的那样
.limit指定了向任何一个文件写入(以字节为单位)的大致最大值。如果这是零,那么就没有限制了。(默认为无限制)。
它将默认值声明为“无限制”,但限制是由在使用的JRE/JDK安装目录中找到的logging.properties文件设置的。在我的系统中,Java 8或Java 17,这个文件包含行
java.util.logging.FileHandler.limit = 50000将限制设置为50000。
可能的解决办法:
FileHandler的构造函数中设置限制,例如:new FileHandler("%h/java%u.log", 0, 1); // using the default file patternlogging.properties),由java.util.logging.config.file系统属性指定。https://stackoverflow.com/questions/70280813
复制相似问题