禁用Java日志轮换。

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); 

但是这个方法很好用,除了启用了日志轮换。

而且我得到的文件有:

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

我想要的是只有一个日志文件,并且不启用轮换。

我该怎么做?


6
强制回答:不要使用java.util.logging,它很糟糕。使用其他东西。任何其他的东西。 - skaffman
4个回答

1
除了已经给出的答案,我想质疑您禁用日志轮换的愿望。有很好的理由让日志轮换(比如磁盘空间不足等),这是一个标准的程序。我建议您调查一下为什么要关闭它,并消除这种需求。例如,如果您想轻松地挖掘日志信息,也许您应该考虑使用一个可以与轮换日志很好地配合使用的软件包(例如splunk或其他软件)。此外,请考虑日志轮换是高度可配置的,因此您可能只需要更改轮换配置。还要考虑从日志中获取所需信息并将其发送到其他地方以实现此目的,而不必担心轮换日志本身...

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


感谢您的回答。我的问题是,我的应用程序是一个高流量的Web服务应用程序,使用日志记录会创建很多以log.1、log.2等命名的文件,客户觉得这不好。因此,我寻找了禁用此功能的选项。另外,我已经设置了WebService每天创建一个日志文件,通过将当前日期与日志文件名相结合来实现。 - mvg
你知道如何在操作系统(Red Hat Linux)中禁用它吗? - mvg
通常情况下,手册可以提供帮助。例如:http://linuxcommand.org/man_pages/logrotate8.html 那么客户觉得这不好怎么办?他们对Unix系统管理了解多少呢?他们有什么建议?日志轮换是一个众所周知的、有效的设置和过程/配置。他们真正理解它的作用吗? - Manfred Moser

1

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

敬礼, 路易斯。


这对我很有效。例如:Handler fh = new FileHandler("output.log",1048576,1,true);。只创建一个文件,它被追加并在每1048576字节时清除。 - atomicules

1

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

你确定你的应用程序正确关闭了吗?我曾经遇到过这个问题。由于我的应用程序没有正确关闭,当我启动我的应用程序时,就会创建一个myApplication.log.1文件。


-1
如果你必须使用它,那么请尝试使用Integer.MAX_INT代替0。0实际上可能被视为0字节,从而导致每次初始化时都进行旋转。
另外,如果你想要“只有一个文件,没有旋转”,那么请使用只接受文件名的1个参数构造函数,它会做正确的事情。

从FileHandler javadoc中:“limit指定要写入任何一个文件的最大字节数(大约)。如果这个值为零,则没有限制。”因此,将其设置为0应该禁用限制,而不是导致无限旋转。 - joe p

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接