org.apache.uima.logger=<logger class> would be a system property that
must be specified with -Dorg.apache.uima.logger=<logger class> when the
JVM is started.
We don't have any other configuration file that can be used for this
instead.
-- Michael
Christoph Büscher wrote:
Hi,
at first glance this sounds like a good solution.
As I'm quiet new to UIMA I still don't understand where the overwrite
for the configuration property (e.g. org.apache.uima.logger=<logger
class>) would take place. Would this be a system property set (e.g. on
starting the JVM) or is there another configuration property file that
can be edited by the user for this?
Christoph
Michael Baessler schrieb:
Hi,
we had several requests to add a Log4j wrapper implementation to the
core framework. Roberto Franchini also provided a first
implementation that seems to work.
Now the open items are:
- add resource dependency (Log4j) to the uimaj-core POM
- add configuration functionality to configure the used logger class
instead of changing the factoryConfig.xml
How does the logger configuration currently work:
The logger implementation that is used is specified in the
factoryConfig.xml file like:
<logger class="org.apache.uima.util.impl.JSR47Logger_impl"/>
To change the logger implementation the factoryConfig.xml must be
changed.
How can the configuration work in the future:
Since the factoryConfig.xml file isn't a place where the user should
change things, I would suggest to add
a configuration property specially for the logging configuration like:
org.apache.uima.logger=<logger class>
If someone would like to change the logger for the framework the
parameter must be specified. The factoryConfig.xml is not changed in
that case.
The code in the class FactoryConfigParseHandler (in
UIMAFramwork_impl.java) is modified to check if the property is
available. If it is available
the specified class is used, if it is not available the class
specified in factoryConfig.xml is used.
if ("logger".equals(qName)) {
if (context != CONTEXT_FACTORY_CONFIG) {
throw new SAXException(I18nUtil
.localizeMessage(UIMAException.STANDARD_MESSAGE_CATALOG,
Locale.getDefault(),
"element_unexpected_in_context", new
Object[] { "<logger>" }));
}
try {
// get logger class
mLoggerClass = Class.forName(attributes.getValue("class"));
// get static method getInstance()
Method instanceMethod =
mLoggerClass.getMethod("getInstance", new Class[0]);
// invoke getInstance() method and retrieve default logger
object
mDefaultLogger = (Logger) instanceMethod.invoke(null, new
Class[0]);
} catch (Exception e) {
throw new SAXException(e);
}
}
Does this sounds useful and easy to use?
-- Michael