internal void CatchLevel( LogLevel level )
{
Debug.Assert( (level & LogLevel.IsFiltered) == 0 );
switch( level )
{
case LogLevel.Fatal:
{
State s = this;
do
{
s.FatalCount = s.FatalCount + 1;
s.MaxLogLevel = LogLevel.Fatal;
}
while( (s = s.Parent) != null );
break;
}
case LogLevel.Error:
{
State s = this;
do
{
s.ErrorCount = s.ErrorCount + 1;
if( s.MaxLogLevel != LogLevel.Fatal ) s.MaxLogLevel = LogLevel.Error;
}
while( (s = s.Parent) != null );
break;
}
case LogLevel.Warn:
{
State s = this;
do
{
s.WarnCount = s.WarnCount + 1;
if( s.MaxLogLevel < LogLevel.Warn ) s.MaxLogLevel = LogLevel.Warn;
}
while( (s = s.Parent) != null );
break;
}
default:
{
State s = this;
do
{
if( s.MaxLogLevel < level ) s.MaxLogLevel = level;
}
while( (s = s.Parent) != null );
break;
}
}
}
}