Java Log4j:关于FallbackErrorHandler的问题

Java Log4j:关于FallbackErrorHandler的问题,java,log4j,Java,Log4j,我正在开发一个客户机-服务器应用程序,希望实现一个灵活的Loggingframework,所以我选择了log4j,它不再真正发展,但仍然是一个方便的框架 因为日志记录是在网络上进行的,所以我需要一个解决方案,即网络驱动器不可用,因此日志记录程序必须更改其目标文件 现在我想使用Log4j库中的FallbackErrorHandler(配置了一个XML文件),实现成功了:当我的网络驱动器不可用时,它会切换到本地日志文件,因此不会丢失任何日志记录。但从昨天开始,我就遇到了两个问题,无法找到解决方法 不

我正在开发一个客户机-服务器应用程序,希望实现一个灵活的Loggingframework,所以我选择了log4j,它不再真正发展,但仍然是一个方便的框架

因为日志记录是在网络上进行的,所以我需要一个解决方案,即网络驱动器不可用,因此日志记录程序必须更改其目标文件

现在我想使用Log4j库中的FallbackErrorHandler(配置了一个XML文件),实现成功了:当我的网络驱动器不可用时,它会切换到本地日志文件,因此不会丢失任何日志记录。但从昨天开始,我就遇到了两个问题,无法找到解决方法

不返回初始日志记录配置:

当网络驱动器再次打开并且记录器可以写入旧的目标时,log4j仍然在本地驱动器上记录日志,我不知道如何通知原始(主)记录器重新启动。我还尝试将第二个附加程序附加到ErrorHandler,该附加程序应镜像失败的主记录器,它尝试在网络目标上写入,当网络再次打开时,它将在本地和网络驱动器上同时登录这两个文件。但不幸的是,它没有成功,我只收到一条失败消息,错误处理程序内容不适合

log4j:WARN The content of element type "errorHandler" must match "(param*,root-ref?,logger-ref*,appender-ref?)". 
这是负责的代码

<appender name="TraceAppender" class="org.apache.log4j.DailyRollingFileAppender">
    <!-- The second appender-ref "TestAppender" leads to the error. -->
    <errorHandler class="org.apache.log4j.varia.FallbackErrorHandler">
        <logger-ref ref="com.idoh"/>
        <appender-ref ref="TraceFallbackAppender"/>
        <appender-ref ref="TestAppender"/>
    </errorHandler>
    <param name="datePattern" value=".yyyy-MM-dd" />
    <param name="file" value="logs/Trace.txt" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-6r %d{HH:mm:ss,SSS} [%t] %-5p - %m%n"/>
    </layout>
</appender>
错误本身是可以预料的,但在此之后没有记录器工作

/编辑

第一条错误消息被吞没:


我认识到,导致在主记录器和FallbackErrorHandler之间切换的第一条消息(例如,对只读文件的日志记录请求)被吞没了,因此无论是主记录器还是备份记录器都不知道它遗漏了什么。那么还有谁能解决这个问题?或者有什么建议?

我终于可以解决第一个关于重置日志配置的问题了。这非常简单:我在我的应用程序中使用了一种方法,当服务器重新连接时,该方法被触发。我只是用这个方法编写了配置加载,所以每次我的服务器断开然后重新连接时,配置都会再次加载。因此,记录器不仅继续记录日志,而且还会重置ErrorHandler,因此它只在原始目的地确实不可用时记录日志。唯一出现的问题是,xml不像服务器那样快速可用,因此我必须实现while-wait-loop。现在,我尝试用Java属性文件配置我的基本记录器,并在应用程序代码中实例化FallbackErrorHandler(主要是出于测试原因)。但即使我正确地实例化了它们,如果出现无法访问的Appender,FallbackErrorHandler也不会启动。有人对这个案子有经验吗?我想知道这是否有可能……我终于可以解决我的第一个关于重置日志配置的问题了。这非常简单:我在我的应用程序中使用了一种方法,当服务器重新连接时,该方法被触发。我只是用这个方法编写了配置加载,所以每次我的服务器断开然后重新连接时,配置都会再次加载。因此,记录器不仅继续记录日志,而且还会重置ErrorHandler,因此它只在原始目的地确实不可用时记录日志。唯一出现的问题是,xml不像服务器那样快速可用,因此我必须实现while-wait-loop。现在,我尝试用Java属性文件配置我的基本记录器,并在应用程序代码中实例化FallbackErrorHandler(主要是出于测试原因)。但即使我正确地实例化了它们,如果出现无法访问的Appender,FallbackErrorHandler也不会启动。有人对这个案子有经验吗?我不知道这是否可能。。
log4j:ERROR Failed to flush writer,
java.io.IOException: Der angegebene Netzwerkname ist nicht mehr verfügbar
     (which means, that the stated networkname isn´t reachable)