Java Logger FileHandler 命名约定

标签 java logging filehandler

我部署了一个servlet。我对生成的日志文件有点困惑。特别是我不知道该看哪一个。

使用相同的数据生成了多个。

我正在使用以下代码来初始化我的文件处理程序。

Logger logger = Logger.getLogger(Global.TAG);
String path = realPath + "myappname" + ".%g.log";
FileHandler fh = new FileHandler(path, 10240000, 1000, true);
logger.addHandler(fh);
logger.setLevel(Level.ALL);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
logInfo("Logger Configured!");

请注意,当文件旋转时,我有 %g

生成的文件是这样的。

myappname.0.log
myappname.0.log.1
myappname.0.log.2
myappname.0.log.3
myappname.0.log.4
myappname.0.log.5
myappname.0.log.6
myappname.1.log
myappname.1.log.2
myappname.1.log.4
myappname.1.log.5
myappname.2.log
myappname.2.log.1
myappname.2.log.2
myappname.2.log.3
myappname.2.log.4
myappname.2.log.5
myappname.2.log.6
myappname.3.log
myappname.3.log.1
myappname.3.log.3
myappname.3.log.6

在生成日志的最后 2-3 周内,Servlet 被多次取消部署和重新部署。

我注意到具有相同名称的日志(除了“.log”部分之后的最后一位)具有相同的日志记录语句。有些文件较多,有些较少。

什么给了?我应该如何阅读这篇文章?

最佳答案

您在部署时以编程方式打开 FileHandler,因此您可以在取消部署时从记录器中关闭并删除 FileHandler。

根据 FileHandler文档:

Normally the "%u" unique field is set to 0. However, if the FileHandler tries to open the filename and finds the file is currently in use by another process it will increment the unique number field and try again. This will be repeated until FileHandler finds a file name that is not currently in use. If there is a conflict and no "%u" field has been specified, it will be added at the end of the filename after a dot. (This will be after any automatically added generation number.)

您必须通过logging.properties设置FileHandler,以便它只安装一次,或者您将设置和拆卸代码移至ServletContextListener

关于Java Logger FileHandler 命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25143666/

相关文章:

ios - Testflight SDK 和 iOS 模拟器 - 如何使用?

perl - 如果不在Perl中关闭文件句柄会怎样?

java - 使用二维数组在java中创建一副纸牌

java - 从数组中删除重复项并写入文本文件

arrays - 不要在日志中打印 secret

java - 如何关闭线程中的FileHandlers?

java - 性能影响打开和关闭文件处理程序?

Java将String解析为LocalDateTime而不提供时间

java - 一个消费者从两个不同集群上的两个不同主题消费

Ruby gem 正在覆盖标准库