哪种方法实际在log4j2中执行翻转

时间:2018-11-09 04:41:13

标签: java logging log4j log4j2

我想知道哪种方法实际上执行log4j2中文件的翻转。我尝试在源代码中搜索它,但找不到它。

public RolloverDescription rollover(final RollingFileManager manager)类中有一个方法DefaultRolloverStrategy,我在我的CustomStrategy类中对此方法进行了覆盖,只是发现该方法没有执行实际的过渡。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您要查找的实际上是RolloverDescription,其中包含两种类型的操作:

  

AsyncAction-在关闭当前活动日志文件之后且在下一次尝试翻转之前要完成的操作,可以异步执行。

     

SyncAction-在关闭当前活动日志文件之后将控制权返回给调用者之前要完成的操作。

正在执行这些动作的部分是RollingFileManager.rollover

        final RolloverDescription descriptor = strategy.rollover(this);
        if (descriptor != null) {
            writeFooter();
            closeOutputStream();
            if (descriptor.getSynchronous() != null) {
                LOGGER.debug("RollingFileManager executing synchronous {}", descriptor.getSynchronous());
                try {
                    success = descriptor.getSynchronous().execute();
                } catch (final Exception ex) {
                    success = false;
                    logError("Caught error in synchronous task", ex);
                }
            }

            if (success && descriptor.getAsynchronous() != null) {
                LOGGER.debug("RollingFileManager executing async {}", descriptor.getAsynchronous());
                asyncExecutor.execute(new AsyncAction(descriptor.getAsynchronous(), this));
                releaseRequired = false;
            }
            return true;
        }

因此,您的CustomStrategy.rollover是上面的代码片段的第一行中发生的事情。如上所述,CustomStrategy.rollover返回RolloverDescription,其中包含要执行的动作。