【发布时间】:2011-02-12 23:25:36
【问题描述】:
我正在尝试使用 Java Logger。我得到了包含内容的记录器文件(name.log),它可以工作,而且我还得到一个空的name.log.lck 文件。
为什么会出现这个文件,创建它们的程序是什么以及如何消除这种行为?
【问题讨论】:
我正在尝试使用 Java Logger。我得到了包含内容的记录器文件(name.log),它可以工作,而且我还得到一个空的name.log.lck 文件。
为什么会出现这个文件,创建它们的程序是什么以及如何消除这种行为?
【问题讨论】:
在 Linux 中,我有这些 .LCK 文件:
> ls -l
-rw-r--r-- 1 el el 4810 Feb 9 2013 mybackground.gif
-rw-r--r-- 1 el el 33 Feb 9 2013 mybackground.gif.LCK
-rwxr--r-- 1 el el 193 Feb 9 2013 my_file.html
-rw-r--r-- 1 el el 33 Feb 9 2013 my_file.html.LCK
某些程序正在创建这些文件。你必须找出它是哪一个。执行此操作的程序将是一个尝试通过网络或什至在此磁盘上对这些文件执行某种操作的程序。同步、复制或删除磁盘上文件的编写不佳的程序可能会选择在其操作中使用锁定文件。
我的锁定文件包含以下信息:
eric||my.myemail@hotmail.com
一旦让它们处于打开状态的不负责任的进程退出,删除.LCK 文件是安全的。这些文件的目的是确保执行相同操作的两个进程不会相互影响而导致错误。
.LCK 文件的使用是一种糟糕的编程习惯,违反了“不要再猜测自己”的规则。创建执行冗余操作的代码只是为了确保我们做对了三倍是sign you are a bad programmer。
任何程序被当场乱扔这些 .LCK 文件,都应该以极端的偏见进行负面评价。
在我的例子中,创建并保持打开这些文件的是“DreamWeaver CS4 自动同步”操作。您必须手动删除这些文件,然后找出导致这些文件保持打开状态的操作,然后提交错误报告以修复该软件。
【讨论】:
.lck 被处理程序(文件处理程序)用来锁定文件以删除该文件。在关闭程序之前,您需要关闭与该记录器对象关联的处理程序。
以下是如何关闭关联处理程序的示例行:
for(Handler h:log.getHandlers())
{
h.close(); //must call h.close or a .LCK file will remain.
}
【讨论】:
在 Unix/Linux 中通常使用锁定文件来确保对重要资源的独占或串行访问。
在这种情况下,资源就是日志文件本身——您不希望两个或多个记录器实例同时尝试写入同一个日志文件。那根本不会奏效。更多关于file locking
作为 Peter Barrett says 关于 Java Logger:
创建日志文件时,会调用一个单独的锁定文件(在您的 案例)“dbslogfile.txt.lck”也被创建。记录器将其用作 用于访问实际日志文件的互斥机制。
【讨论】:
“.lck”听起来很像一个锁定文件。您没有说您使用的是哪个记录器,但最后其中一个使用 .lck 文件进行锁定 - 请参阅 this reply:
当创建日志文件时,一个名为(在您的 案例)“dbslogfile.txt.lck”也被创建。记录器将其用作 用于访问实际日志文件的互斥机制。它 似乎无法创建它(它必须创建 当然是日志文件之前的锁定文件)。
【讨论】: