当前位置: 首页 > 面试题库 >

Log4j FileAppender重新创建已删除的文件

孙嘉
2023-03-14
问题内容

我正在使用Log4j作为我正在研究的项目中的日志记录框架。我有以下情况:Log4j配置为将日志写入日志文件。有时,此日志文件将复制到另一个目标并删除。日志记录框架可以正常工作,但是由于已删除日志,因此日志未写入日志文件。有什么方法可以告诉Log4j重新创建文件并继续将日志写入日志文件。

最好的问候,拉希德


问题答案:

我研究了log4j的来源,发现log4j无法创建新的日志文件,它只是在删除日志文件时将错误消息打印到system.err

    /** 
     This method determines if there is a sense in attempting to append.

     <p>It checks whether there is a set output target and also if 
     there is a set layout. If these checks fail, then the boolean 
     value <code>false</code> is returned. */

  protected   boolean checkEntryConditions() {  
    if(this.closed) {  
      LogLog.warn("Not allowed to write to a closed appender.");  
      return false;  
    }

    if(this.qw == null) {  
      errorHandler.error("No output stream or file set for the appender named ["+  
            name+"].");  
      return false;  
    }

    if(this.layout == null) {  
      errorHandler.error("No layout set for the appender named ["+ name+"].");  
      return false;  
    }  
    return true;  
  }

我认为有两种解决方法

  1. 创建另一个cron线程以监视日志文件
  2. 在getLog或getInstance(singleton)中添加判断,检查日志文件是否存在,如果不存在则初始化log4j


 类似资料:
  • 我被困在一个奇怪的情况下,实际上我有一个工作,它在一个单独的文件夹中创建文件,该工作每天都在运行,所以它每天都在该文件夹中创建文件,该文件扩展名为. dat以及它的zip文件。 现在,假设作业今天运行,它将在该文件夹中创建两个文件,第二天我希望前一天的zip文件保留在该文件夹中,但是。dat文件应在删除之前删除。今天的dat文件得到创建,我已经写了代码,但它没有发生,因为我想请建议如何实现这一点

  • 本文向大家介绍MongoDB的创建、更新和删除,包括了MongoDB的创建、更新和删除的使用技巧和注意事项,需要的朋友参考一下 概要   下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D(删除);由于R(查询)操作相对来说内容比较多,也比较繁琐,   同时使用频率也比较高,所以下一篇会拿出来单独介绍。废话不多说,连上服务器,我们直接进入正题! 一、创建   按照我

  • 问题内容: 我正在使用Java 2 ee开发Web应用程序。我也使用hibernate和MySQL。为了还原备份文件,在我的应用程序中的某个点上,我需要删除当前数据库并重新创建它,我按如下操作: 删除并重新创建后,我需要使用默认用户(Spring Security用户)初始化数据库 但在最后一行应用程序抛出此异常 我知道hibernate在启动时会创建表,但是在这种情况下,它在drop / rec

  • 本文向大家介绍php文件夹的创建与删除方法,包括了php文件夹的创建与删除方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php文件夹的创建与删除方法。分享给大家供大家参考。具体如下: 1、创建文件夹 2、创建文件夹,递归式创建 3、删除文件夹 希望本文所述对大家的php程序设计有所帮助。

  • 我在测试我的应用程序后意外发现了这个。我有一个recycleListView,其中包含cardview,每个cardview都有一个来自firestore的文档。在我随机删除一些文档后,它会从FirebaseFirestore中消失,但当我再次尝试删除它时,它仍然返回isSuccess()true。有人能解释一下为什么会这样吗? 这是我用来从集合中删除文档的代码。 Collection_A > 文

  • 问题内容: 使用Django 1.7迁移。 我不小心在数据库中删除了一个表。我假设再次运行迁移将重新创建表,但是没有,Django声明“不应用任何迁移”。 如何让Django重新创建表? 我跑了: 我尝试过更改模型并运行新的迁移,它只是指出“表’x.test_customer’不存在”是正确的,但是我希望它可以重新创建表。 问题答案: 迁移检查模型中的差异,然后将其转换为操作,然后转换为SQL。它