Java Logger FileHandler命名约定

时间:2014-08-05 16:16:32

标签: java logging filehandler

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

是什么给出的?我该怎么读这个?

2 个答案:

答案 0 :(得分:1)

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

根据FileHandler文档:

  

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

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

答案 1 :(得分:0)

日志文件可能已达到限制并已旋转到新的日志文件。如果这是真的,没有附加数字的文件将具有10240000的字节数。

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

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