如何使用 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 系统指定 属性。