I talked to Tomaz a bit about this last Friday, but thought I would open it up to a wider audience and get others opinions as well.

All handlers, except the async-handler, have an attribute called formatter. The formatter allows a string value which is the pattern used to format the log message. This only allows for the use of the org.jboss.logmanager.formatters.PatternFormatter.

There is a JIRA [1], I thought an RFE too but I can't find it, to allow for the use of custom formatters. For example the use of java.util.logging.XMLFormatter. I actually think this could be useful. Possibly something like a JSONFormatter to help the console team with displaying log messages on the web console [2].

There is also a JIRA [3] to allow the colors for the log output to be changed.

The current model, we'll just use the console-handler for simplicity, looks like the following:
{
    "outcome" => "success",
    "result" => {
        "autoflush" => true,
        "enabled" => true,
        "encoding" => undefined,
        "filter" => undefined,
        "filter-spec" => undefined,
        "formatter" => "%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n",
        "level" => "INFO",
        "name" => "CONSOLE",
        "target" => "System.out"
    }
}

The easiest option (A) in both cases would be to add something like a "custom-formatter" attribute and a "formatter-color-mapping" attribute. What bothers me about this though is it doesn't seem logical. Having attributes that may or may not be used together doesn't make a lot of sense to me.

Another option (B) would be to change the model to look something like:
{
    "outcome" => "success",
    "result" => {
        "autoflush" => true,
        "enabled" => true,
        "encoding" => undefined,
        "filter" => undefined,
        "filter-spec" => undefined,
        "formatter" => {
            "pattern" => {
                "format-pattern" => "%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n",
                "color-mapping" => "warn=yellow,error=red,info=clear"
            }
        },
        "level" => "INFO",
        "name" => "CONSOLE",
        "target" => "System.out"
    }
}

-- OR --

{
    "outcome" => "success",
    "result" => {
        "autoflush" => true,
        "enabled" => true,
        "encoding" => undefined,
        "filter" => undefined,
        "filter-spec" => undefined,
        "formatter" => {
            "custom" => {
                "module" => "sun.jdk",
                "class" => "java.util.logging.XMLFormatter",
                "properties" => {
                    "key1" => "value1",
                    "key2" => "value2"
                }
            }
        },
        "level" => "INFO",
        "name" => "CONSOLE",
        "target" => "System.out"
    }
}

I know some people don't like complex attribute values. Personally I don't mind them, but they are a PITA with regards to CLI. A model change like this would also require some transformers for backwards compatibility. Though that doesn't really bother me all that much.

Anyone have opinions on should be used? I tend to lean option B because it feels more logical.

[1]: https://issues.jboss.org/browse/WFLY-1188
[2]: https://issues.jboss.org/browse/WFLY-1144
[3]: https://issues.jboss.org/browse/WFLY-1059
-- 
James R. Perkins
Red Hat JBoss Middleware