86 lines
2.1 KiB
C#
86 lines
2.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace OpenSim.Framework
|
|
{
|
|
public class Logger
|
|
{
|
|
public static Logger Instance = new Logger( false );
|
|
|
|
public delegate void LoggerMethodDelegate();
|
|
private delegate bool LoggerDelegate( LoggerMethodDelegate whatToDo );
|
|
|
|
|
|
private LoggerDelegate m_delegate;
|
|
|
|
public Logger( bool log )
|
|
{
|
|
if( log )
|
|
{
|
|
m_delegate = CatchAndLog;
|
|
}
|
|
else
|
|
{
|
|
m_delegate = DontCatch;
|
|
}
|
|
}
|
|
|
|
public bool Wrap( LoggerMethodDelegate whatToDo )
|
|
{
|
|
return m_delegate( whatToDo );
|
|
}
|
|
|
|
|
|
private bool CatchAndLog(LoggerMethodDelegate whatToDo)
|
|
{
|
|
try
|
|
{
|
|
whatToDo();
|
|
return true;
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
System.Console.WriteLine( "Exception logged!!! Woah!!!!" );
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private bool DontCatch(LoggerMethodDelegate whatToDo)
|
|
{
|
|
whatToDo();
|
|
return true;
|
|
}
|
|
|
|
public class LoggerExample
|
|
{
|
|
public void TryWrap()
|
|
{
|
|
// This will log and ignore
|
|
Logger log = new Logger(true);
|
|
|
|
log.Wrap(delegate()
|
|
{
|
|
Int16.Parse("waa!");
|
|
});
|
|
|
|
// This will throw;
|
|
try
|
|
{
|
|
|
|
log = new Logger(false);
|
|
|
|
log.Wrap(delegate()
|
|
{
|
|
Int16.Parse("waa!");
|
|
});
|
|
}
|
|
catch
|
|
{
|
|
System.Console.WriteLine("Example barfed!");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|