private void testSetRootLogger(final String loggingProfile) throws Exception {
    final KernelServices kernelServices = boot();
    final String fileHandlerName = "test-file-handler";

    // Add new file logger so we can test root logger change
    final File logFile = createLogFile();
    addFileHandler(
        kernelServices,
        loggingProfile,
        fileHandlerName,
        org.jboss.logmanager.Level.INFO,
        logFile,
        false);

    // Read root logger
    final ModelNode rootLoggerAddress = createRootLoggerAddress(loggingProfile).toModelNode();
    ModelNode op =
        SubsystemOperations.createOperation(
            ClientConstants.READ_RESOURCE_OPERATION, rootLoggerAddress);
    final ModelNode rootLoggerResult = executeOperation(kernelServices, op);
    final List<String> handlers =
        modelNodeAsStringList(rootLoggerResult.get(CommonAttributes.HANDLERS.getName()));

    // Remove the root logger
    op = SubsystemOperations.createRemoveOperation(rootLoggerAddress);
    executeOperation(kernelServices, op);

    // Set a new root logger
    op = SubsystemOperations.createOperation(ModelDescriptionConstants.ADD, rootLoggerAddress);
    op.get(CommonAttributes.LEVEL.getName())
        .set(rootLoggerResult.get(CommonAttributes.LEVEL.getName()));
    for (String handler : handlers) op.get(CommonAttributes.HANDLERS.getName()).add(handler);
    op.get(CommonAttributes.HANDLERS.getName()).add(fileHandlerName);
    executeOperation(kernelServices, op);
    doLog(loggingProfile, LEVELS, "Test123");

    // Remove the root logger
    op = SubsystemOperations.createRemoveOperation(rootLoggerAddress);
    executeOperation(kernelServices, op);

    // Revert root logger
    op = SubsystemOperations.createOperation(ModelDescriptionConstants.ADD, rootLoggerAddress);
    op.get(CommonAttributes.LEVEL.getName())
        .set(rootLoggerResult.get(CommonAttributes.LEVEL.getName()));
    op.get(CommonAttributes.HANDLERS.getName())
        .set(rootLoggerResult.get(CommonAttributes.HANDLERS.getName()));
    executeOperation(kernelServices, op);

    // remove file handler
    removeFileHandler(kernelServices, loggingProfile, fileHandlerName, false);

    // check that root logger were changed - file logger was registered
    String log = FileUtils.readFileToString(logFile);
    assertTrue(log.contains("Test123"));
  }
  private void testPatternFormatter(final String profileName) throws Exception {
    final KernelServices kernelServices = boot();
    final String fileHandlerName = "test-file-handler";

    final File logFile = createLogFile();

    // Add file handler
    final ModelNode handlerAddress =
        addFileHandler(
            kernelServices,
            profileName,
            fileHandlerName,
            org.jboss.logmanager.Level.INFO,
            logFile,
            false);

    // Get the logger
    final Logger logger = getLogger(profileName);

    // Create the logger
    final ModelNode loggerAddress =
        createLoggerAddress(profileName, logger.getName()).toModelNode();
    ModelNode op = SubsystemOperations.createAddOperation(loggerAddress);
    op.get(LoggerResourceDefinition.USE_PARENT_HANDLERS.getName()).set(false);
    op.get(CommonAttributes.HANDLERS.getName()).setEmptyList().add(fileHandlerName);
    executeOperation(kernelServices, op);

    // Create a pattern formatter
    final ModelNode patternFormatterAddress =
        createPatternFormatterAddress(profileName, "PATTERN").toModelNode();
    op = SubsystemOperations.createAddOperation(patternFormatterAddress);
    // Add a format that can be read back to make sure it matches the pattern used in the handler
    op.get(PatternFormatterResourceDefinition.PATTERN.getName()).set("[NAMED-PATTERN] %s%n");
    executeOperation(kernelServices, op);

    // Add the named formatter to the handler
    op =
        SubsystemOperations.createWriteAttributeOperation(
            handlerAddress, FileHandlerResourceDefinition.NAMED_FORMATTER, "PATTERN");
    executeOperation(kernelServices, op);

    // Log 3 lines
    logger.info("Test message 1");
    logger.info("Test message 2");
    logger.info("Test message 3");

    // Check the file, should only contain 3 lines
    final List<String> lines = FileUtils.readLines(logFile);
    assertEquals(
        "Additional messages written to handler that should not be there.", 3, lines.size());

    // Check each line
    assertEquals("Line patterns don't match.", "[NAMED-PATTERN] Test message 1", lines.get(0));
    assertEquals("Line patterns don't match.", "[NAMED-PATTERN] Test message 2", lines.get(1));
    assertEquals("Line patterns don't match.", "[NAMED-PATTERN] Test message 3", lines.get(2));

    // Clean up
    op =
        SubsystemOperations.CompositeOperationBuilder.create()
            .addStep(SubsystemOperations.createRemoveOperation(loggerAddress))
            .addStep(SubsystemOperations.createRemoveOperation(handlerAddress))
            .addStep(SubsystemOperations.createRemoveOperation(patternFormatterAddress))
            .build()
            .getOperation();
    executeOperation(kernelServices, op);
  }