我在log4j之上使用lsf4j来记录我的应用程序中的事件。我有一个自定义文件追加器,用于将事件记录到多日志文件,主日志文件和我的应用程序管理的每个流程实例的日志文件中。 我还有一个计划的清除任务,该任务并行运行,其目的是清除已完成进程的所有日志文件,但在尝试删除这些文件时,将引发以下错误:“该进程无法访问该文件,因为该文件正被另一个文件使用处理。”。 如果我重新启动应用程序,则在运行清除任务时确实会清除这些文件,因此原因是由log4j设置的锁定仅在重新启动时才释放。 我需要一种方法,以编程方式解除给定名称的日志文件的锁定。
答案 0 :(得分:1)
问题在于,未删除已结束进程的附加程序,因此这些进程的日志文件保持锁定状态,仅在重新启动整个应用程序后才释放它们。我的解决方案是在过程完成后删除相应的附加程序。
配置conf =(((LoggerContext)LogManager.getContext(false))。getConfiguration(); RoutingAppender应用=(RoutingAppender)conf.getAppender(“动态附加名称”); app.deleteAppender(“负责完成过程的appender”);