I got this class in C# which works fine. But I was wondering if there was a more elegant solution to what I am trying to do. It looks rather clumsy and inefficient for a Logging functionality.
The code should be fairly self-explanatory.
public static class Log
{
public static string EngineName { get; set; }
private static List<String> logdata = new List<string>();
static void LogMessage(string msg)
{
Console.WriteLine("[{0}][LOG]: {1}", EngineName, msg);
StringBuilder sb = new StringBuilder();
sb.Append("[").Append(EngineName).Append("][LOG]: ").Append(msg);
logdata.Add(sb.ToString());
}
public static void EngineMessage(string msg)
{
Console.WriteLine("[{0}][ENGINE]: {1}", EngineName, msg);
StringBuilder sb = new StringBuilder();
sb.Append("[").Append(EngineName).Append("][Engine]: ").Append(msg);
logdata.Add(sb.ToString());
}
public static void ExceptionMessage(Exception e)
{
Console.WriteLine("[{0}][EXCEPTION]: {1}", EngineName, e.Message);
StringBuilder sb = new StringBuilder();
sb.Append("[").Append(EngineName).Append("][EXCEPTION]: ").Append(e.Message);
logdata.Add(sb.ToString());
}
public static void CustomMessage(string title, string msg)
{
title.ToUpper();
Console.WriteLine("[{0}][{1}]: {2}", EngineName, title, msg);
StringBuilder sb = new StringBuilder();
sb.Append("[").Append(EngineName).Append("][").Append(title).Append("]: ").Append(msg);
logdata.Add(sb.ToString());
}
public static void ClearLogData()
{
logdata.Clear();
}
public static void PrintLog()
{
Console.WriteLine("===== LOG DATA =====\n");
Console.WriteLine(new DateTime().ToString()+"\n");
foreach(string s in logdata)
{
Console.WriteLine(s + "\n");
}
}
public static void SaveLog(string path)
{
throw new NotSupportedException();
}
}
EDIT
Based on feedback from the accepted answer here is my revised code:
public static class Log
{
public static string EngineName { get; set; }
private static List<String> logdata = new List<string>();
public static void LogMessage(string msg, ELogflag flag, string title = "")
{
StringBuilder sb = new StringBuilder();
sb.Append("[" + EngineName + "]");
switch (flag)
{
case ELogflag.LOG:
sb.Append("[LOG]");
break;
case ELogflag.ENGINE:
sb.Append("[ENGINE]");
break;
case ELogflag.CRITICAL:
sb.Append("[CRITICAL]");
break;
case ELogflag.CUSTOM:
title = title.ToUpper();
sb.Append("[" + title + "]");
break;
default:
sb.Append("[UNKNOWN]");
break;
}
sb.Append(msg);
Console.WriteLine(sb.ToString());
logdata.Add(sb.ToString());
}
public static void ClearLogData()
{
logdata.Clear();
}
public static void PrintLog()
{
Console.WriteLine("===== LOG DATA =====\n");
Console.WriteLine(new DateTime().ToString() + "\n");
foreach (string s in logdata)
{
Console.WriteLine(s + "\n");
}
}
public static void SaveLog(string path)
{
throw new NotSupportedException();
}
}
And my new Enum:
enum ELogflag
{
LOG,
ENGINE,
CRITICAL,
CUSTOM
}