#region Arthea License
/***********************************************************************
* Arthea MUD by R. Jennings (2007) http://arthea.googlecode.com/ *
* By using this code you comply with the Artistic and GPLv2 Licenses. *
***********************************************************************/
#endregion
using System;
using System.IO;
using System.Text;
using Arthea.Commands.Admin;
using Arthea.Connections.Players;
using Arthea.Environment;
namespace Arthea
{
/// <summary>
/// Implements a way to write a log
/// </summary>
public struct Log
{
private static readonly TextWriter file = new StreamWriter(CreateFileName());
/// <summary>
/// Creates the name of the file.
/// </summary>
/// <returns>the file name</returns>
private static string CreateFileName()
{
return Paths.LogDir + DateTime.Now.ToString("ddMMyy-h.mt") + ".log";
}
private static void LogMessage(string type, object message)
{
StringBuilder buf = new StringBuilder();
buf.AppendFormat("[{0}] [{1,-5}] {2}", DateTime.Now, type, message);
file.WriteLine(buf);
file.Flush();
Console.WriteLine(buf);
}
/// <summary>
/// Logs a debugging message.
/// </summary>
/// <param name="text">The text.</param>
/// <param name="args">The args.</param>
public static void Debug(string text, params object[] args)
{
LogMessage("DEBUG", string.Format(text, args));
}
/// <summary>
/// Logs a debugging message.
/// </summary>
/// <param name="message">The message.</param>
public static void Debug(object message)
{
LogMessage("DEBUG", message);
}
/// <summary>
/// Logs a warning message.
/// </summary>
/// <param name="text">The text.</param>
/// <param name="args">The args.</param>
public static void Warn(string text, params object[] args)
{
LogMessage("WARN", string.Format(text, args));
}
/// <summary>
/// Logs a warning message.
/// </summary>
/// <param name="message">The message.</param>
public static void Warn(object message)
{
LogMessage("WARN", message);
}
/// <summary>
/// Logs and info message.
/// </summary>
/// <param name="text">The text.</param>
/// <param name="args">The args.</param>
public static void Info(string text, params object[] args)
{
LogMessage("INFO", string.Format(text, args));
}
/// <summary>
/// Logs an info message.
/// </summary>
/// <param name="message">The message.</param>
public static void Info(object message)
{
LogMessage("INFO", message);
}
/// <summary>
/// Logs an error message.
/// </summary>
/// <param name="text">The text.</param>
/// <param name="args">The args.</param>
public static void Error(string text, params object[] args)
{
LogMessage("ERROR", string.Format(text, args));
}
/// <summary>
/// Logs an error message.
/// </summary>
/// <param name="message">The message.</param>
public static void Error(object message)
{
LogMessage("ERROR", message);
}
/// <summary>
/// Logs a fatal error message.
/// </summary>
/// <param name="text">The text.</param>
/// <param name="args">The args.</param>
public static void Fatal(string text, params object[] args)
{
LogMessage("FATAL", string.Format(text, args));
}
/// <summary>
/// Logs a fatal error message.
/// </summary>
/// <param name="message">The message.</param>
public static void Fatal(object message)
{
LogMessage("FATAL", message);
}
/// <summary>
/// Logs bugs.
/// </summary>
/// <param name="text">The text.</param>
/// <param name="args">The args.</param>
public static void Bug(string text, params object[] args)
{
string message = string.Format(text, args);
LogMessage("BUG", message);
BugNet(message);
}
/// <summary>
/// Log bugs.
/// </summary>
/// <param name="message">The message.</param>
public static void Bug(object message)
{
LogMessage("BUG", message);
BugNet(message);
}
/// <summary>
/// Report a bugs to online admins.
/// </summary>
/// <param name="text">The text.</param>
private static void BugNet(object text)
{
foreach (Player player in Lists.Players)
{
if (player.Powers[Powers.BugNet])
{
player.WriteLine("BUGNET> {0}", text);
}
}
}
}
}