【问题标题】:couldn't get lock for .log file in Java在 Java 中无法锁定 .log 文件
【发布时间】:2011-04-18 09:13:16
【问题描述】:

我正在使用 Logger 来自 Restlet 框架 和 FileHandler 以在生产模式下记录我的应用程序。但是,我总是得到 Excetption“无法为 Logger 创建 FileHandler:无法获得 test.log 的锁定”。我该如何解决这个问题? 代码如下:

FileHandler aFileHandler = new FileHandler("test.log");

Formatter aFormatter = new SimpleFormatter();

aFileHandler.setFormatter(aFormatter);

aLogger.setLevel(Level.ALL);

aLogger.addHandler(aFileHandler);

这个日志文件被多个进程同时使用。

除了 .log 文件之外,还创建了许多其他文件,例如“.log.1, .log.2 .....”。有人知道为什么吗?

【问题讨论】:

  • 您可能希望提供有关您收到的异常的更多详细信息,并可能提供一些显示相关位的代码

标签: java logging


【解决方案1】:

您应该提供完整的类名。 Logger & FileHandler 是模棱两可的。但是我猜您正在使用某种记录器,可能是 Log4j 和 RollingFileAppender,这就是您的文件被轮换的原因,即 xxx.log.1 和 xxx.log.2。 您的文件正被其他进程/应用程序使用,这就是您无法锁定该文件的原因。

【讨论】:

  • 所以你的意思是如果我改变.log文件名,这个问题就会解决?
  • 您必须提供更多详细信息。请分享上面@posdef 提到的显示 Logger 和 FileHandler 片段的代码
  • 解决办法也不懂。
  • 反刍你详细说明?我也有同样的问题。
【解决方案2】:

我也遇到了同样的错误,但是当我检查文件的路径时,它是错误的,所以在更正路径后它工作正常。只要检查路径是否正确即可。

【讨论】:

    【解决方案3】:

    对于“已经创建了很多其他文件,例如“.log.1,.log.2 .....”的问题,您必须删除日志文件处理程序并在不需要它后将其关闭。 这是供您参考的代码。 log.removeHandler(fileHandler); fileHandler.close();

    【讨论】:

    • 我试过了,效果是在我停止或重新启动 tomcat 之前,文件中不存在任何日志条目。那时,(大部分)条目出现在文件中,但有些条目丢失了。是否有一个命令可以强制记录器在释放处理程序之前写入?
    【解决方案4】:

    对我来说,记录器对将要在其中创建日志文件的目录没有写入权限。因此,我只是将路径更改为可以保证完全访问的地方(例如FileHandler aFileHandler = new FileHandler("D:\\test.log");,问题就消失了。

    我猜可能是因为我没有指定任何特定的文件路径(例如FileHandler("test.log");,在使用 tomcat 部署我的 Web 服务后,试图在 Catalina base directory 或某处创建日志文件没有写权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-18
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多