【问题标题】:why java logger overwrite the log file?为什么java logger会覆盖日志文件?
【发布时间】:2021-07-02 08:45:31
【问题描述】:

我有一个使用 Perl 脚本运行的 java 应用程序。 在 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");

【问题讨论】:

  • 请注意,-w 和 use warnings 做的事情几乎相同,因此您只需要其中一个。大多数人选择use warnings。
  • 你当前的配置文件是从哪里得到的?
  • 来自属性logconfig.properties 文件,如您在.perl 文件中所见。
  • 考虑在 perl 脚本中应用正则表达式替换配置文件来修改模式属性以强制执行您想要的。从文档来看,似乎不存在标准的配置文件解决方案。
  • 我不明白你的建议,你能给我一个简单的例子吗。

标签: java perl


【解决方案1】:

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

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

java.util.logging.FileHandler.limit = 0

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 2018-03-06
    • 1970-01-01
    • 2014-04-28
    • 2012-10-15
    • 2017-04-13
    • 2020-08-08
    • 1970-01-01
    • 2023-02-13
    相关资源
    最近更新 更多