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