如何使用 FileHandler 输出长行?
How to output long line with FileHandler?
对于不太长的行,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());
}
}
有没有办法让它工作?
FileHandler
有一个限制,如其 documentation 中所述:
<handler-name>.limit specifies an approximate maximum amount to write (in bytes) to any one file. If this is zero, then there is no limit. (Defaults to no 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 pattern
- 有一个不同的配置文件 (
logging.properties
) 调整了限制,由 java.util.logging.config.file
系统指定 属性。
对于不太长的行,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());
}
}
有没有办法让它工作?
FileHandler
有一个限制,如其 documentation 中所述:
<handler-name>.limit specifies an approximate maximum amount to write (in bytes) to any one file. If this is zero, then there is no limit. (Defaults to no 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 pattern
- 有一个不同的配置文件 (
logging.properties
) 调整了限制,由java.util.logging.config.file
系统指定 属性。