0

我部署了一个 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”部分之后的最后一位除外)具有相同的日志记录语句。有些文件多一些,有些少一些。

是什么赋予了?我应该怎么读这个?

4

2 回答 2

1

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

根据FileHandler文档:

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

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

于 2014-08-06T16:51:06.617 回答
0

日志文件可能已达到限制并轮换到新的日志文件。如果这是真的,那么没有附加数字的文件的字节数将为 10240000。

另一种可能性是,每次重新启动程序时,它都会创建一个新日志,并附加一个数字。

如果您还没有查看 FileHandlers 上的 javadoc。 http://docs.oracle.com/javase/7/docs/api/java/util/logging/FileHandler.html

于 2014-08-05T17:33:11.960 回答