SharpGen/Logging/LoggerBase.cs (71 lines of code) (raw):
using System;
namespace SharpGen.Logging
{
public abstract class LoggerBase
{
/// <summary>
/// Gets or sets the logger output.
/// </summary>
/// <value>The logger output.</value>
public abstract ILogger LoggerOutput { get; }
/// <summary>
/// Gets a value indicating whether this instance has errors.
/// </summary>
/// <value>
/// <c>true</c> if this instance has errors; otherwise, <c>false</c>.
/// </value>
public abstract bool HasErrors { get; }
/// <summary>
/// Gets or sets the progress report.
/// </summary>
/// <value>The progress report.</value>
public abstract IProgressReport ProgressReport { get; }
/// <summary>
/// Runs a delegate in the specified log context.
/// </summary>
/// <param name = "context">The context.</param>
/// <param name = "method">The method.</param>
public void RunInContext(string context, Action method)
{
try
{
PushContext(context);
method();
}
finally
{
PopContext();
}
}
/// <summary>
/// Pushes a context string.
/// </summary>
/// <param name = "context">The context.</param>
public abstract void PushContext(string context);
/// <summary>
/// Pushes a context location.
/// </summary>
/// <param name = "fileName">Name of the file.</param>
/// <param name = "line">The line.</param>
/// <param name = "column">The column.</param>
public abstract void PushLocation(string fileName, int line = 1, int column = 1);
/// <summary>
/// Pops the context location.
/// </summary>
public abstract void PopLocation();
/// <summary>
/// Pushes a context formatted string.
/// </summary>
/// <param name = "context">The context.</param>
/// <param name = "parameters">The parameters.</param>
public abstract void PushContext(string context, params object[] parameters);
/// <summary>
/// Pops the context.
/// </summary>
public abstract void PopContext();
/// <summary>
/// Logs the specified message.
/// </summary>
/// <param name = "message">The message.</param>
public void Message(string message)
{
Message("{0}", message);
}
/// <summary>
/// Logs the specified message.
/// </summary>
/// <param name = "message">The message.</param>
/// <param name = "parameters">The parameters.</param>
public void Message(string message, params object[] parameters)
{
LogRawMessage(LogLevel.Info, null, message, null, parameters);
}
/// <summary>
/// Logs the specified progress level and message.
/// </summary>
/// <param name = "level">The level.</param>
/// <param name = "message">The message.</param>
/// <param name = "parameters">The parameters.</param>
public abstract void Progress(int level, string message, params object[] parameters);
/// <summary>
/// Logs the specified warning.
/// </summary>
/// <param name = "message">The message.</param>
public void Warning(string code, string message)
{
Warning(code, "{0}", message);
}
/// <summary>
/// Logs the specified warning.
/// </summary>
public void Warning(string code, string message, params object[] parameters)
{
LogRawMessage(LogLevel.Warning, code, message, null, parameters);
}
/// <summary>
/// Logs the specified error.
/// </summary>
public void Error(string code, string message, Exception ex, params object[] parameters)
{
LogRawMessage(LogLevel.Error, code, message, ex, parameters);
}
/// <summary>
/// Logs the specified error.
/// </summary>
public void Error(string code, string message)
{
Error(code, "{0}", message);
}
/// <summary>
/// Logs the specified error.
/// </summary>
public void Error(string code, string message, params object[] parameters)
{
Error(code, message, null, parameters);
}
/// <summary>
/// Logs the specified fatal error.
/// </summary>
public void Fatal(string message, Exception ex, params object[] parameters)
{
LogRawMessage(LogLevel.Fatal, null, message, ex, parameters);
Exit("A fatal error occured");
}
/// <summary>
/// Logs the specified fatal error.
/// </summary>
public void Fatal(string message)
{
Fatal("{0}", message);
}
/// <summary>
/// Logs the specified fatal error.
/// </summary>
public void Fatal(string message, params object[] parameters)
{
Fatal(message, null, parameters);
}
/// <summary>
/// Exits the process.
/// </summary>
public abstract void Exit(string reason, params object[] parameters);
/// <summary>
/// Logs the raw message to the LoggerOutput.
/// </summary>
public abstract void LogRawMessage(LogLevel type, string code, string message, Exception exception, params object[] parameters);
}
}