TraceSettings settings = null;
if(value != null)
{
//Touch DebugLogLevel and DebugLogCategory so they are statically
//initialized or parse will not see all the levels/categories.
LogLevel level = DebugLogLevel.ERROR;
LogCategory categoryStub = DebugLogCategory.MESSAGE;
Set<LogCategory> includeCategories = null;
boolean noArgs = false;
boolean noRetVal = false;
int stackDepth = 0;
boolean includeCause = false;
String[] keywords = value.split(",");
for(String keyword : keywords)
{
//See if stack dump keyword is included
if(keyword.startsWith(STACK_DUMP_KEYWORD))
{
//See if a stack depth is included
if(keyword.length() == STACK_DUMP_KEYWORD.length())
{
stackDepth = DebugStackTraceFormatter.COMPLETE_STACK;
}
else
{
int depthStart= keyword.indexOf("=", STACK_DUMP_KEYWORD.length());
if (depthStart == STACK_DUMP_KEYWORD.length())
{
try
{
stackDepth = Integer.valueOf(keyword.substring(depthStart+1));
}
catch(NumberFormatException nfe)
{ // TODO: i18n
System.err.println("The keyword " + STACK_DUMP_KEYWORD +
" contains an invalid depth value. The complete stack " +
"will be included.");
}
}
}
}
//See if to include cause in exception messages.
else if(keyword.equals(INCLUDE_CAUSE_KEYWORD))
{
includeCause = true;
}
//See if to supress method arguments.
else if(keyword.equals(SUPPRESS_ARG_KEYWORD))
{
noArgs = true;
}
//See if to supress return values.
else if(keyword.equals(SUPPRESS_RETVAL_KEYWORD))
{
noRetVal = true;
}
else if(keyword.startsWith(INCLUDE_CATEGORY_KEYWORD))
{
int categoryStart =
keyword.indexOf("=", INCLUDE_CATEGORY_KEYWORD.length());
if(keyword.length() == INCLUDE_CATEGORY_KEYWORD.length() ||
categoryStart != INCLUDE_CATEGORY_KEYWORD.length())
{ // TODO: i18n
System.err.println("The keyword " + INCLUDE_CATEGORY_KEYWORD +
" does not contain an equal sign to define the set of " +
"categories to include. All categories will be included.");
}
else
{
String[] categories =
keyword.substring(categoryStart+1).split("[|]");
includeCategories = new HashSet<LogCategory>();
for(String category : categories)
{
try
{
includeCategories.add(DebugLogCategory.parse(category));
}
catch(IllegalArgumentException iae)
{ // TODO: i18n
System.err.println("The keyword " + INCLUDE_CATEGORY_KEYWORD +
" contains an invalid debug log category: " +
iae.toString() + ". It will be ignored.");
}
}
}
}
else if(keyword.startsWith(LEVEL_KEYWORD))
{
int levelStart =
keyword.indexOf("=", LEVEL_KEYWORD.length());
if(keyword.length() == LEVEL_KEYWORD.length() ||
levelStart != LEVEL_KEYWORD.length())
{ // TODO: i18n
System.err.println("The keyword " + LEVEL_KEYWORD +
" does not contain an equal sign to specify the log level. " +
"Default level of " + level.toString() + " will be used.");
}
else
{
try
{
level = LogLevel.parse(keyword.substring(levelStart+1));
}
catch(IllegalArgumentException iae)
{ // TODO: i18n
System.err.println("The keyword " + LEVEL_KEYWORD +
" contains an invalid debug log level: " +
iae.toString() + ". Default level of " + level.toString() +
" will be used.");
}
}
}