为什么 java 记录器覆盖日志文件?

why java logger overwrite the log file?

我有一个 java 应用程序,其中 运行 使用 Perl 脚本。 在 Perl 中,我配置了日志文件属性路径。 每次我 运行 应用程序,它都会覆盖日志文件。 我希望每次执行时都有一个具有唯一名称的新文件,而不是被覆盖或只是一个文件,但在文件末尾附加日志。

知道为什么吗?如何解决?

logconf.properties

handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler

.level= WARNING

java.util.logging.FileHandler.pattern= /pipa/log/waach_%u_%g.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.level = INFO
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.append=true

java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

com.xyz.foo.level = SEVERE
ci.pipa.tari.level = INFO

.Perl 脚本

use warnings;
use strict;
use POSIX;

my $java = "/usr/bin/java";

my $classpath  = "/pipata/java/lib/pipatar.jar";
my $properties = "-Djava.util.logging.config.file=/pipata/java/log/logconfig.properties";
my $mainClass  = "ci.pipa.upload.RunPipaFile";

my $command = " $java -cp $classpath $properties $mainClass 2021 2";

print "$command \n";

system ("$command");

根据API,java.util.logging.FileHandler.limit 指定近似的最大写入量(以字节为单位) 到任何一个文件。如果这是零,则没有限制。 (默认为无限制)。

在我的例子中,5000 是不够的,每次我 运行,它都会将剩余的内容添加到一个覆盖原始文件的新文件中。我将限制设置为零,现在它将日志附加到同一文件内容的末尾。

java.util.logging.FileHandler.limit = 0