3

我使用 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); 

但这确实很好用,除了启用了日志轮换。

我得到文件:

运行日志 运行日志 1 运行日志 2

我想要的是只得到一个日志文件,没有启用轮换。

我怎么做 ?

4

4 回答 4

1

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

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

于 2009-10-16T06:26:10.453 回答
1

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

问候,路易斯。

于 2010-07-13T17:36:32.777 回答
1

除了已经给出的答案之外,我会质疑您禁用对数旋转的愿望。有很好的理由让日志轮换(如磁盘空间不足等),这是一个标准过程。我想说调查是什么让你想要关闭它并消除这种需求。例如,如果您希望能够轻松地挖掘日志信息,也许您应该考虑查看一个为您执行此操作的包(例如 splunk 或其他),并且可以很好地处理旋转日志。还要考虑日志轮换是高度可配置的,因此您可能只想更改轮换配置。还要考虑到您可以从为此目的发送到其他地方的日志中获取所需的信息,而不要理会轮换日志......

并且根据操作系统/日志轮换配置系统,您可能可以直接在操作系统中关闭轮换,而不必担心您的代码。

于 2010-12-21T05:43:26.300 回答
-1

如果必须使用它,请尝试使用 Integer.MAX_INT 而不是 0。0 实际上可能被视为 0 字节,因此每次初始化时都会导致轮换。

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

于 2009-10-02T10:35:12.507 回答