org.apache.logging.log4j.core.appender.rolling.action.Action Java Examples

The following examples show how to use org.apache.logging.log4j.core.appender.rolling.action.Action. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: Log4j2Util.java    From summerframework with Apache License 2.0 5 votes vote down vote up
private static DefaultRolloverStrategy createStrategyByAction(String loggerName, String loggerDir) {

        IfFileName ifFileName = IfFileName.createNameCondition(null, loggerName + "\\.\\d{4}-\\d{2}-\\d{2}.*");
        IfLastModified ifLastModified = IfLastModified.createAgeCondition(Duration.parse("1d"));
        DeleteAction deleteAction = DeleteAction.createDeleteAction(loggerDir, false, 1, false, null,
            new PathCondition[] {ifLastModified, ifFileName}, null, config);
        Action[] actions = new Action[] {deleteAction};

        return DefaultRolloverStrategy.createStrategy("7", "1", null, null, actions, false, config);
    }
 
Example #2
Source File: ZebraRolloverStrategy.java    From Zebra with Apache License 2.0 5 votes vote down vote up
/**
 * Perform the rollover.
 * @param manager The RollingFileManager name for current active log file.
 * @return A RolloverDescription.
 * @throws SecurityException if an error occurs.
 */
@Override
public RolloverDescription rollover(final RollingFileManager manager) throws SecurityException {
    if (maxIndex < 0) {
        return null;
    }
    final long start = System.nanoTime();
    final int fileIndex = purge(minIndex, maxIndex, manager);
    if (fileIndex < 0) {
        return null;
    }
    if (LOGGER.isTraceEnabled()) {
        final double duration = (System.nanoTime() - start) / (1000.0 * 1000.0 * 1000.0);
        LOGGER.trace("DefaultRolloverStrategy.purge() took {} seconds", duration);
    }
    final StringBuilder buf = new StringBuilder(255);
    manager.getPatternProcessor().formatFileName(subst, buf, fileIndex);
    final String currentFileName = manager.getFileName();

    String renameTo = buf.toString();
    final String compressedName = renameTo;
    Action compressAction = null;

    if (renameTo.endsWith(EXT_GZIP)) {
        renameTo = renameTo.substring(0, renameTo.length() - EXT_GZIP.length());
        compressAction = new GzCompressAction(new File(renameTo), new File(compressedName), true);
    } else if (renameTo.endsWith(EXT_ZIP)) {
        renameTo = renameTo.substring(0, renameTo.length() - EXT_ZIP.length());
        compressAction = new ZipCompressAction(new File(renameTo), new File(compressedName), true,
                compressionLevel);
    }

    final FileRenameAction renameAction =
            new FileRenameAction(new File(currentFileName), new File(renameTo), false);

    return new RolloverDescriptionImpl(currentFileName, false, renameAction, compressAction);
}
 
Example #3
Source File: DirectWriteRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 5 votes vote down vote up
/**
 * Constructs a new instance.
 *
 * @param maxFiles The maximum number of files that match the date portion of the pattern to keep.
 * @param customActions custom actions to perform asynchronously after rollover
 * @param stopCustomActionsOnError whether to stop executing asynchronous actions if an error occurs
 * @param tempCompressedFilePatternString File pattern of the working file
 *                                     used during compression, if null no temporary file are used
 */
protected DirectWriteRolloverStrategy(final int maxFiles, final int compressionLevel,
                                      final StrSubstitutor strSubstitutor, final Action[] customActions,
                                      final boolean stopCustomActionsOnError, final String tempCompressedFilePatternString) {
    super(strSubstitutor);
    this.maxFiles = maxFiles;
    this.compressionLevel = compressionLevel;
    this.stopCustomActionsOnError = stopCustomActionsOnError;
    this.customActions = customActions == null ? Collections.<Action> emptyList() : Arrays.asList(customActions);
    this.tempCompressedFilePattern =
            tempCompressedFilePatternString != null ? new PatternProcessor(tempCompressedFilePatternString) : null;
}
 
Example #4
Source File: DefaultRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 5 votes vote down vote up
/**
 * Constructs a new instance.
 *
 * @param minIndex The minimum index.
 * @param maxIndex The maximum index.
 * @param customActions custom actions to perform asynchronously after rollover
 * @param stopCustomActionsOnError whether to stop executing asynchronous actions if an error occurs
 * @param tempCompressedFilePatternString File pattern of the working file
 *                                     used during compression, if null no temporary file are used
 */
protected DefaultRolloverStrategy(final int minIndex, final int maxIndex, final boolean useMax,
        final int compressionLevel, final StrSubstitutor strSubstitutor, final Action[] customActions,
        final boolean stopCustomActionsOnError, final String tempCompressedFilePatternString) {
    super(strSubstitutor);
    this.minIndex = minIndex;
    this.maxIndex = maxIndex;
    this.useMax = useMax;
    this.compressionLevel = compressionLevel;
    this.stopCustomActionsOnError = stopCustomActionsOnError;
    this.customActions = customActions == null ? Collections.<Action> emptyList() : Arrays.asList(customActions);
    this.tempCompressedFilePattern =
            tempCompressedFilePatternString != null ? new PatternProcessor(tempCompressedFilePatternString) : null;
}
 
Example #5
Source File: RolloverDescriptionImpl.java    From logging-log4j2 with Apache License 2.0 5 votes vote down vote up
/**
 * Create new instance.
 *
 * @param activeFileName active log file name after rollover, may not be null.
 * @param append         true if active log file after rollover should be opened for appending.
 * @param synchronous    action to be completed after close of current active log file, may be null.
 * @param asynchronous   action to be completed after close of current active log file and
 *                       before next rollover attempt.
 */
public RolloverDescriptionImpl(final String activeFileName, final boolean append, final Action synchronous,
                               final Action asynchronous) {
    Objects.requireNonNull(activeFileName, "activeFileName");

    this.append = append;
    this.activeFileName = activeFileName;
    this.synchronous = synchronous;
    this.asynchronous = asynchronous;
}
 
Example #6
Source File: AbstractRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 5 votes vote down vote up
protected Action merge(final Action compressAction, final List<Action> custom, final boolean stopOnError) {
    if (custom.isEmpty()) {
        return compressAction;
    }
    if (compressAction == null) {
        return new CompositeAction(custom, stopOnError);
    }
    final List<Action> all = new ArrayList<>();
    all.add(compressAction);
    all.addAll(custom);
    return new CompositeAction(all, stopOnError);
}
 
Example #7
Source File: DefaultRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 4 votes vote down vote up
/**
   * Performs the rollover.
   *
   * @param manager The RollingFileManager name for current active log file.
   * @return A RolloverDescription.
   * @throws SecurityException if an error occurs.
   */
  @Override
  public RolloverDescription rollover(final RollingFileManager manager) throws SecurityException {
      int fileIndex;
final StringBuilder buf = new StringBuilder(255);
      if (minIndex == Integer.MIN_VALUE) {
          final SortedMap<Integer, Path> eligibleFiles = getEligibleFiles(manager);
          fileIndex = eligibleFiles.size() > 0 ? eligibleFiles.lastKey() + 1 : 1;
	manager.getPatternProcessor().formatFileName(strSubstitutor, buf, fileIndex);
      } else {
          if (maxIndex < 0) {
              return null;
          }
          final long startNanos = System.nanoTime();
          fileIndex = purge(minIndex, maxIndex, manager);
          if (fileIndex < 0) {
              return null;
          }
	manager.getPatternProcessor().formatFileName(strSubstitutor, buf, fileIndex);
          if (LOGGER.isTraceEnabled()) {
              final double durationMillis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos);
              LOGGER.trace("DefaultRolloverStrategy.purge() took {} milliseconds", durationMillis);
          }
      }

      final String currentFileName = manager.getFileName();

      String renameTo = buf.toString();
      final String compressedName = renameTo;
      Action compressAction = null;

      final FileExtension fileExtension = manager.getFileExtension();
      if (fileExtension != null) {
          final File renameToFile = new File(renameTo);
          renameTo = renameTo.substring(0, renameTo.length() - fileExtension.length());
          if (tempCompressedFilePattern != null) {
              buf.delete(0, buf.length());
              tempCompressedFilePattern.formatFileName(strSubstitutor, buf, fileIndex);
              final String tmpCompressedName = buf.toString();
              final File tmpCompressedNameFile = new File(tmpCompressedName);
              final File parentFile = tmpCompressedNameFile.getParentFile();
              if (parentFile != null) {
                  parentFile.mkdirs();
              }
              compressAction = new CompositeAction(
                      Arrays.asList(fileExtension.createCompressAction(renameTo, tmpCompressedName,
                              true, compressionLevel),
                              new FileRenameAction(tmpCompressedNameFile,
                                      renameToFile, true)),
                      true);
          } else {
              compressAction = fileExtension.createCompressAction(renameTo, compressedName,
                      true, compressionLevel);
          }
      }

      if (currentFileName.equals(renameTo)) {
          LOGGER.warn("Attempt to rename file {} to itself will be ignored", currentFileName);
          return new RolloverDescriptionImpl(currentFileName, false, null, null);
      }

      if (compressAction != null && manager.isAttributeViewEnabled()) {
          // Propagate posix attribute view to compressed file
          // @formatter:off
          final Action posixAttributeViewAction = PosixViewAttributeAction.newBuilder()
                                                      .setBasePath(compressedName)
                                                      .setFollowLinks(false)
                                                      .setMaxDepth(1)
                                                      .setPathConditions(new PathCondition[0])
                                                      .setSubst(getStrSubstitutor())
                                                      .setFilePermissions(manager.getFilePermissions())
                                                      .setFileOwner(manager.getFileOwner())
                                                      .setFileGroup(manager.getFileGroup())
                                                      .build();
          // @formatter:on
          compressAction = new CompositeAction(Arrays.asList(compressAction, posixAttributeViewAction), false);
      }

      final FileRenameAction renameAction = new FileRenameAction(new File(currentFileName), new File(renameTo),
                  manager.isRenameEmptyFiles());

      final Action asyncAction = merge(compressAction, customActions, stopCustomActionsOnError);
      return new RolloverDescriptionImpl(currentFileName, false, renameAction, asyncAction);
  }
 
Example #8
Source File: DefaultRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 4 votes vote down vote up
/**
 * Purges and renames old log files in preparation for rollover. The newest file will have the smallest index, the
 * oldest will have the highest.
 *
 * @param lowIndex low index
 * @param highIndex high index. Log file associated with high index will be deleted if needed.
 * @param manager The RollingFileManager
 * @return true if purge was successful and rollover should be attempted.
 */
private int purgeDescending(final int lowIndex, final int highIndex, final RollingFileManager manager) {
    // Retrieve the files in descending order, so the highest key will be first.
    final SortedMap<Integer, Path> eligibleFiles = getEligibleFiles(manager, false);
    final int maxFiles = highIndex - lowIndex + 1;
    LOGGER.debug("Eligible files: {}", eligibleFiles);

    while (eligibleFiles.size() >= maxFiles) {
        try {
            final Integer key = eligibleFiles.firstKey();
            Files.delete(eligibleFiles.get(key));
            eligibleFiles.remove(key);
        } catch (final IOException ioe) {
            LOGGER.error("Unable to delete {}, {}", eligibleFiles.firstKey(), ioe.getMessage(), ioe);
            break;
        }
    }
    final StringBuilder buf = new StringBuilder();
    for (final Map.Entry<Integer, Path> entry : eligibleFiles.entrySet()) {
        buf.setLength(0);
        // LOG4J2-531: directory scan & rollover must use same format
        manager.getPatternProcessor().formatFileName(strSubstitutor, buf, entry.getKey() + 1);
        final String currentName = entry.getValue().toFile().getName();
        String renameTo = buf.toString();
        final int suffixLength = suffixLength(renameTo);
        if (suffixLength > 0 && suffixLength(currentName) == 0) {
            renameTo = renameTo.substring(0, renameTo.length() - suffixLength);
        }
        final Action action = new FileRenameAction(entry.getValue().toFile(), new File(renameTo), true);
        try {
            LOGGER.debug("DefaultRolloverStrategy.purgeDescending executing {}", action);
            if (!action.execute()) {
                return -1;
            }
        } catch (final Exception ex) {
            LOGGER.warn("Exception during purge in RollingFileAppender", ex);
            return -1;
        }
    }

    return lowIndex;
}
 
Example #9
Source File: DefaultRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 4 votes vote down vote up
/**
 * Purges and renames old log files in preparation for rollover. The oldest file will have the smallest index, the
 * newest the highest.
 *
 * @param lowIndex low index. Log file associated with low index will be deleted if needed.
 * @param highIndex high index.
 * @param manager The RollingFileManager
 * @return true if purge was successful and rollover should be attempted.
 */
private int purgeAscending(final int lowIndex, final int highIndex, final RollingFileManager manager) {
    final SortedMap<Integer, Path> eligibleFiles = getEligibleFiles(manager);
    final int maxFiles = highIndex - lowIndex + 1;

    boolean renameFiles = !eligibleFiles.isEmpty() && eligibleFiles.lastKey() >= maxIndex;
    while (eligibleFiles.size() >= maxFiles) {
        try {
            LOGGER.debug("Eligible files: {}", eligibleFiles);
            final Integer key = eligibleFiles.firstKey();
            LOGGER.debug("Deleting {}", eligibleFiles.get(key).toFile().getAbsolutePath());
            Files.delete(eligibleFiles.get(key));
            eligibleFiles.remove(key);
            renameFiles = true;
        } catch (final IOException ioe) {
            LOGGER.error("Unable to delete {}, {}", eligibleFiles.firstKey(), ioe.getMessage(), ioe);
            break;
        }
    }
    final StringBuilder buf = new StringBuilder();
    if (renameFiles) {
        for (final Map.Entry<Integer, Path> entry : eligibleFiles.entrySet()) {
            buf.setLength(0);
            // LOG4J2-531: directory scan & rollover must use same format
            manager.getPatternProcessor().formatFileName(strSubstitutor, buf, entry.getKey() - 1);
            final String currentName = entry.getValue().toFile().getName();
            String renameTo = buf.toString();
            final int suffixLength = suffixLength(renameTo);
            if (suffixLength > 0 && suffixLength(currentName) == 0) {
               renameTo = renameTo.substring(0, renameTo.length() - suffixLength);
            }
            final Action action = new FileRenameAction(entry.getValue().toFile(), new File(renameTo), true);
            try {
                LOGGER.debug("DefaultRolloverStrategy.purgeAscending executing {}", action);
                if (!action.execute()) {
                    return -1;
                }
            } catch (final Exception ex) {
                LOGGER.warn("Exception during purge in RollingFileAppender", ex);
                return -1;
            }
        }
    }

    return eligibleFiles.size() > 0 ?
            (eligibleFiles.lastKey() < highIndex ? eligibleFiles.lastKey() + 1 : highIndex) : lowIndex;
}
 
Example #10
Source File: DefaultRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 4 votes vote down vote up
public List<Action> getCustomActions() {
    return customActions;
}
 
Example #11
Source File: DefaultRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 4 votes vote down vote up
public Action[] getCustomActions() {
    return customActions;
}
 
Example #12
Source File: DirectWriteRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 4 votes vote down vote up
/**
 * Performs the rollover.
 *
 * @param manager The RollingFileManager name for current active log file.
 * @return A RolloverDescription.
 * @throws SecurityException if an error occurs.
 */
@Override
public RolloverDescription rollover(final RollingFileManager manager) throws SecurityException {
    LOGGER.debug("Rolling " + currentFileName);
    if (maxFiles < 0) {
        return null;
    }
    final long startNanos = System.nanoTime();
    final int fileIndex = purge(manager);
    if (LOGGER.isTraceEnabled()) {
        final double durationMillis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos);
        LOGGER.trace("DirectWriteRolloverStrategy.purge() took {} milliseconds", durationMillis);
    }
    Action compressAction = null;
    final String sourceName = getCurrentFileName(manager);
    String compressedName = sourceName;
    currentFileName = null;
    nextIndex = fileIndex + 1;
    final FileExtension fileExtension = manager.getFileExtension();
    if (fileExtension != null) {
        compressedName += fileExtension.getExtension();            
        if (tempCompressedFilePattern != null) {
            final StringBuilder buf = new StringBuilder();
            tempCompressedFilePattern.formatFileName(strSubstitutor, buf, fileIndex);
            final String tmpCompressedName = buf.toString();
            final File tmpCompressedNameFile = new File(tmpCompressedName);
            final File parentFile = tmpCompressedNameFile.getParentFile();
            if (parentFile != null) {
                parentFile.mkdirs();
            }
            compressAction = new CompositeAction(
                    Arrays.asList(fileExtension.createCompressAction(sourceName, tmpCompressedName,
                            true, compressionLevel),
                            new FileRenameAction(tmpCompressedNameFile,
                                    new File(compressedName), true)),
                    true);
        } else {
            compressAction = fileExtension.createCompressAction(sourceName, compressedName,
                  true, compressionLevel);
        }
    }

    if (compressAction != null && manager.isAttributeViewEnabled()) {
        // Propagate posix attribute view to compressed file
        // @formatter:off
        final Action posixAttributeViewAction = PosixViewAttributeAction.newBuilder()
                                                .setBasePath(compressedName)
                                                .setFollowLinks(false)
                                                .setMaxDepth(1)
                                                .setPathConditions(new PathCondition[0])
                                                .setSubst(getStrSubstitutor())
                                                .setFilePermissions(manager.getFilePermissions())
                                                .setFileOwner(manager.getFileOwner())
                                                .setFileGroup(manager.getFileGroup())
                                                .build();
        // @formatter:on
        compressAction = new CompositeAction(Arrays.asList(compressAction, posixAttributeViewAction), false);
    }

    final Action asyncAction = merge(compressAction, customActions, stopCustomActionsOnError);
    return new RolloverDescriptionImpl(sourceName, false, null, asyncAction);
}
 
Example #13
Source File: DirectWriteRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 4 votes vote down vote up
public List<Action> getCustomActions() {
    return customActions;
}
 
Example #14
Source File: DirectWriteRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 4 votes vote down vote up
public Action[] getCustomActions() {
    return customActions;
}
 
Example #15
Source File: ApsSystemUtils.java    From entando-core with GNU Lesser General Public License v3.0 4 votes vote down vote up
public void init() throws Exception {
    String active = (String) this.systemParams.get(INIT_PROP_LOG_ACTIVE_FILE_OUTPUT);
    if (StringUtils.isEmpty(active) || !active.equalsIgnoreCase("true")) {
        return;
    }
    String appenderName = "ENTANDO";
    String conversionPattern = (String) this.systemParams.get("log4jConversionPattern");
    if (StringUtils.isBlank(conversionPattern)) {
        conversionPattern = "%d{yyyy-MM-dd HH:mm:ss.SSS} - %-5p -  %c - %m%n";
    }
    String maxFileSize = (String) this.systemParams.get(INIT_PROP_LOG_FILE_SIZE);
    if (StringUtils.isBlank(maxFileSize)) {
        maxFileSize = "1MB"; //default size
    } else {
        long mega = new Long(maxFileSize) / KILOBYTE;
        maxFileSize = mega + "KB";
    }
    String filePattern = (String) this.systemParams.get(INIT_PROP_LOG_FILE_PATTERN);
    String filename = (String) this.systemParams.get(INIT_PROP_LOG_NAME);
    int maxBackupIndex = Integer.parseInt((String) this.systemParams.get(INIT_PROP_LOG_FILES_COUNT));
    String log4jLevelString = (String) this.systemParams.get(INIT_PROP_LOG_LEVEL);
    if (StringUtils.isBlank(log4jLevelString)) {
        log4jLevelString = "INFO"; //default level
    }
    Configurator.setRootLevel(Level.getLevel(log4jLevelString));
    LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
    loggerContext.getRootLogger().setLevel(Level.getLevel(log4jLevelString));
    Configurator.setAllLevels(loggerContext.getRootLogger().getName(), Level.getLevel(log4jLevelString));
    Configuration configuration = loggerContext.getConfiguration();
    RollingFileAppender fileAppender = (RollingFileAppender) configuration.getAppender(appenderName);
    if (null == fileAppender) {
        PathCondition[] pathConditions = new PathCondition[]{IfAccumulatedFileCount.createFileCountCondition(maxBackupIndex)};
        String basePath = filePattern.substring(0, filePattern.lastIndexOf(File.separator));
        DeleteAction deleteAction = DeleteAction.createDeleteAction(basePath, true, 1, false, null, pathConditions, null, configuration);
        SizeBasedTriggeringPolicy policy = SizeBasedTriggeringPolicy.createPolicy(maxFileSize);
        PatternLayout layout = PatternLayout.newBuilder().withPattern(conversionPattern).build();
        DefaultRolloverStrategy strategy = DefaultRolloverStrategy.newBuilder()
                .withConfig(configuration).withMax(String.valueOf(maxBackupIndex))
                .withCustomActions(new Action[]{deleteAction}).build();
        fileAppender = RollingFileAppender.newBuilder()
                .withName(appenderName)
                .setConfiguration(configuration)
                .withLayout(layout)
                .withFileName(filename)
                .withFilePattern(filePattern)
                .withPolicy(policy)
                .withStrategy(strategy)
                .build();
        configuration.addAppender(fileAppender);
        Configurator.setLevel(appenderName, Level.getLevel(log4jLevelString));
        fileAppender.start();
    }
    AsyncAppender async = (AsyncAppender) loggerContext.getRootLogger().getAppenders().get("async");
    if (null == async) {
        AppenderRef ref = AppenderRef.createAppenderRef(appenderName, Level.getLevel(log4jLevelString), null);
        async = AsyncAppender.newBuilder().setName("async")
                .setConfiguration(configuration)
                .setAppenderRefs(new AppenderRef[]{ref}).build();
        configuration.addAppender(async);
        loggerContext.getRootLogger().addAppender(async);
        async.start();
    }
    loggerContext.updateLoggers();
}
 
Example #16
Source File: ZebraRolloverStrategy.java    From Zebra with Apache License 2.0 4 votes vote down vote up
/**
 * Purge and rename old log files in preparation for rollover. The newest file will have the smallest index, the
 * oldest will have the highest.
 *
 * @param lowIndex  low index
 * @param highIndex high index.  Logger file associated with high index will be deleted if needed.
 * @param manager The RollingFileManager
 * @return true if purge was successful and rollover should be attempted.
 */
private int purgeDescending(final int lowIndex, final int highIndex, final RollingFileManager manager) {
    int suffixLength = 0;

    final List<FileRenameAction> renames = new ArrayList<FileRenameAction>();
    final StringBuilder buf = new StringBuilder();

    // LOG4J2-531: directory scan & rollover must use same format
    manager.getPatternProcessor().formatFileName(subst, buf, lowIndex);

    String lowFilename = subst.replace(buf);

    if (lowFilename.endsWith(EXT_GZIP)) {
        suffixLength = EXT_GZIP.length();
    } else if (lowFilename.endsWith(EXT_ZIP)) {
        suffixLength = EXT_ZIP.length();
    }

    for (int i = lowIndex; i <= highIndex; i++) {
        File toRename = new File(lowFilename);
        boolean isBase = false;

        if (suffixLength > 0) {
            final File toRenameBase =
                    new File(lowFilename.substring(0, lowFilename.length() - suffixLength));

            if (toRename.exists()) {
                if (toRenameBase.exists()) {
                    LOGGER.debug("DefaultRolloverStrategy.purgeDescending deleting {} base of {}.", //
                            toRenameBase, toRename);
                    toRenameBase.delete();
                }
            } else {
                toRename = toRenameBase;
                isBase = true;
            }
        }

        if (toRename.exists()) {
            //
            //    if at upper index then
            //        attempt to delete last file
            //        if that fails then abandon purge
            if (i == highIndex) {
                LOGGER.debug("DefaultRolloverStrategy.purgeDescending deleting {} at high index {}: all slots full.", //
                        toRename, i);
                if (!toRename.delete()) {
                    return -1;
                }

                break;
            }

            //
            //   if intermediate index
            //     add a rename action to the list
            buf.setLength(0);
            // LOG4J2-531: directory scan & rollover must use same format
            manager.getPatternProcessor().formatFileName(subst, buf, i + 1);

            final String highFilename = subst.replace(buf);
            String renameTo = highFilename;

            if (isBase) {
                renameTo = highFilename.substring(0, highFilename.length() - suffixLength);
            }

            renames.add(new FileRenameAction(toRename, new File(renameTo), true));
            lowFilename = highFilename;
        } else {
            break;
        }
    }

    //
    //   work renames backwards
    //
    for (int i = renames.size() - 1; i >= 0; i--) {
        final Action action = renames.get(i);
        try {
            LOGGER.debug("DefaultRolloverStrategy.purgeDescending executing {} of {}: {}", //
                    i, renames.size(), action);
            if (!action.execute()) {
                return -1;
            }
        } catch (final Exception ex) {
            LOGGER.warn("Exception during purge in RollingFileAppender", ex);
            return -1;
        }
    }

    return lowIndex;
}
 
Example #17
Source File: RolloverDescription.java    From logging-log4j2 with Apache License 2.0 2 votes vote down vote up
/**
 * Action to be completed after close of current active log file
 * and before next rollover attempt, may be executed asynchronously.
 *
 * @return action, may be null.
 */
Action getAsynchronous();
 
Example #18
Source File: RolloverDescription.java    From logging-log4j2 with Apache License 2.0 2 votes vote down vote up
/**
 * Action to be completed after close of current active log file
 * before returning control to caller.
 *
 * @return action, may be null.
 */
Action getSynchronous();
 
Example #19
Source File: RolloverDescriptionImpl.java    From logging-log4j2 with Apache License 2.0 2 votes vote down vote up
/**
 * Action to be completed after close of current active log file
 * before returning control to caller.
 *
 * @return action, may be null.
 */
@Override
public Action getSynchronous() {
    return synchronous;
}
 
Example #20
Source File: RolloverDescriptionImpl.java    From logging-log4j2 with Apache License 2.0 2 votes vote down vote up
/**
 * Action to be completed after close of current active log file
 * and before next rollover attempt, may be executed asynchronously.
 *
 * @return action, may be null.
 */
@Override
public Action getAsynchronous() {
    return asynchronous;
}
 
Example #21
Source File: RollingFileManager.java    From logging-log4j2 with Apache License 2.0 2 votes vote down vote up
/**
 * Constructor.
 * @param act The action to perform.
 * @param manager The manager.
 */
public AsyncAction(final Action act, final RollingFileManager manager) {
    this.action = act;
    this.manager = manager;
}
 
Example #22
Source File: DefaultRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 2 votes vote down vote up
/**
 * Defines custom actions.
 *
 * @param customActions custom actions to perform asynchronously after rollover
 * @return This builder for chaining convenience
 */
public Builder setCustomActions(final Action... customActions) {
    this.customActions = customActions;
    return this;
}
 
Example #23
Source File: DirectWriteRolloverStrategy.java    From logging-log4j2 with Apache License 2.0 2 votes vote down vote up
/**
 * Defines custom actions.
 *
 * @param customActions custom actions to perform asynchronously after rollover
 * @return This builder for chaining convenience
 */
public Builder setCustomActions(final Action... customActions) {
    this.customActions = customActions;
    return this;
}