【问题标题】:Java Logger FileHandler naming conventionJava Logger FileHandler 命名约定
【发布时间】:2014-08-05 16:16:32
【问题描述】:

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

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

【问题讨论】:

    标签: java logging filehandler


    【解决方案1】:

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

    根据FileHandler 文档:

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

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

    【讨论】:

    • 我在取消部署时没有关闭与我的日志文件的连接,这导致了所有额外的文件
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2011-02-26
      • 2020-05-15
      • 2011-04-11
      • 1970-01-01
      相关资源
      最近更新 更多