Details
-
Bug
-
Resolution: Done
-
Major
-
None
-
7.0.1.Final
-
None
Description
In the logging subsystem, the management operations are defined in LoggingSubsystemProviders.java.
The attributes defined for each handler type don't always reflect the real attributes that are available.
For example, if I go into the CLI and ask to read the resource description for an async handler, I get:
[standalone@localhost:9999 async-handler=ASYNC] :read-resource-description { "outcome" => "success", "result" => { "description" => "Defines a handler which writes to the sub-handlers in an asynchronous thread. Used for handlers which introduce a substantial amount of lag.", "attributes" => { "name" => { "type" => STRING, "description" => "The handler's name.", "access-type" => "read-only", "storage" => "configuration" }, "level" => { "type" => STRING, "description" => "The log level specifying which message levels will be logged by this. Message levels lower than this value will be discarded.", "access-type" => "read-only", "storage" => "configuration" }, "encoding" => { "type" => STRING, "description" => "The character encoding used by this Handler.", "access-type" => "read-only", "storage" => "configuration" }, "filter" => { "type" => STRING, "description" => "Defines a simple filter type.", "access-type" => "read-only", "storage" => "configuration" }, "formatter" => { "type" => STRING, "description" => "Defines a formatter.", "access-type" => "read-only", "storage" => "configuration" }, "autoflush" => { "type" => BOOLEAN, "description" => "Automatically flush after each write.", "access-type" => "read-only", "storage" => "configuration" }, "handler" => { "type" => LIST, "value-type" => STRING, "description" => "The Handlers associated with this Logger.", "access-type" => "read-only", "storage" => "configuration" }, "queue-length" => { "type" => STRING, "description" => "The queue length to use before flushing writing", "access-type" => "read-only", "storage" => "configuration" }, "overflow-action" => { "type" => STRING, "description" => "Specify what action to take when the overflowing. The valid options are 'block' and 'discard'", "access-type" => "read-only", "storage" => "configuration" } } } }
Clearly, an async handler doesn't accept all of those attributes. If I add the autoflush attribute to my standalone.xml then I will get an error on startup.
<async-handler name="ASYNC" autoflush="true"> <level name="INFO"/> <queue-length value="512"/> <overflow-action value="BLOCK"/> </async-handler>
Furthermore, there is a discrepancy in which attributes are required. Looking at autoflush again, LoggingSubsystemProviders.java says that this attribute is not required. But if I try to create a console handler without this attribute I will get an exception.
[standalone@localhost:9999 console-handler=MYCONSOLE] :add(name=MYCONSOLE,level=INFO) { "outcome" => "failed", "failure-description" => "Operation handler failed: java.lang.IllegalArgumentException", "rolled-back" => true } [standalone@localhost:9999 console-handler=MYCONSOLE] :add(name=MYCONSOLE,level=INFO,autoflush=true) {"outcome" => "success"}
So each attribute needs to be checked to see if it is really required or not. Once this is fixed in LoggingSubsystemProviders.java I can go in and fix this in the console.