/// <summary>
/// Format string is of the form
/// outDevice; type flag1+flag2+...;type flags; ...
/// where flags are a combination of trace markers
/// </summary>
/// <param name="config"></param>
public TraceCfgParser(string config)
{
if (string.IsNullOrEmpty(config))
{
return;
}
var parts = config.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Select(str => str.Trim()).ToArray();
foreach (var filter in this.GetFilters(parts, 1).Reverse())
{
var typeName = filter.Key.TrimStart('!');
var bIsNotFilter = filter.Key.IndexOf('!') == 0;
var levelAndMsgFilter = this.ParseMsgTypeFilter(filter.Value);
var curFilterInstance = new TraceFilter(typeName, levelAndMsgFilter.Value, levelAndMsgFilter.Key, bIsNotFilter ? this.NotFilters : this.Filters);
if (bIsNotFilter)
{
this.NotFilters = curFilterInstance;
}
else
{
this.Filters = curFilterInstance;
}
}
if (parts.Length > 0)
{
this.OpenOutputDevice(parts[0].ToLower());
}
// when only output device was configured or wrong mask was entere we enable full tracing
// by default
if (this.Filters == null)
{
this.Filters = new TraceFilterMatchAll();
}
if (this.bHasError)
{
InternalError.PrintHelp();
}
}