我已经部署了一个servlet。我对生成的日志文件有些困惑。特别是我不确定要看哪一个。

有几个用相同的数据生成的。

我正在使用以下代码初始化我的Filehandler。

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文档:


通常,“%u”唯一字段设置为0。但是,如果FileHandler尝试打开文件名并发现文件正在被另一个进程使用,它将递增唯一编号字段,然后重试。重复此操作,直到FileHandler找到当前未使用的文件名为止。如果存在冲突,但未指定“%u”字段,则会将其添加到文件名末尾的句点之后。 (这将在任何自动添加的世代号之后。)


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

10-07 12:28