禁用java日志轮换

时间:2009-10-02 10:15:19

标签: java java.util.logging

我使用java.util.logging.Logger登录我的应用程序:

    FileHandler fh=new FileHandler(this.todayFileName, 0, 1, true);

    fh.setFormatter(new SimpleFormatter());

    Logger.getLogger(rootLogger.getName()).setLevel(Level.ALL);

    Logger.getLogger(rootLogger.getName()).addHandler(fh); 

但除了启用日志轮换外,这确实有效。

我得到了文件:

run.log run.log.1 run.log.2

我想要的只是一个日志文件,没有启用旋转。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

如果同时多次运行同一个应用程序,java.util.logging将创建许多日志文件,如run.log run.log.1 run.log.2

你确定你的应用程序正确关闭,因为我已经遇到了这个问题。由于我的应用程序没有正确关闭,当我启动我的应用程序时,创建了一个myApplication.log.1

答案 1 :(得分:1)

您必须使用FileHandle构造函数,它使用文件名和布尔值或仅使用文件名的布尔值,这样您将获得一个没有旋转的单个日志文件。

此致 路易斯。

答案 2 :(得分:1)

除了已经给出的答案,我会质疑你想要禁用logrotation。有一个很好的理由让日志旋转(如磁盘空间不足等),这是一个标准的过程。我会说调查是什么让你想要关掉它并消除这种需要。例如。如果你想能够轻松地挖掘日志信息,也许你应该考虑查看为你做这件事的包(例如splunk或其他),并且可以使用旋转日志正常工作。还要考虑日志轮换是高度可配置的,因此您可能只想更改轮换配置。还要考虑你可以从其他地方为此目的发送的日志中获取所需的信息,并单独保留旋转日志......

根据操作系统/日志轮换配置系统,您可能只需在操作系统中关闭旋转,而不必担心代码。

答案 3 :(得分:-1)

如果必须使用它,则尝试使用Integer.MAX_INT而不是0.实际上0可能被视为0字节,因此每次初始化时都会引起旋转。

顺便说一句,如果你想要'只有一个文件,没有轮换',那么使用只需要文件名的1-arg构造函数,它就会做正确的事。