BizHawk/BizHawk.Common/Log.cs

89 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
namespace BizHawk.Common
{
public static class Log
{
static Log()
{
// You can set current desired logging settings here.
// Production builds should be done with all logging disabled.
LogToConsole = true;
//LogToFile = true;
//LogFilename = "d:/bizhawk.log";
//EnableDomain("CD");
//EnableDomain("CPU");
//EnableDomain("VDC");
//EnableDomain("MEM");
}
// ============== Logging Domain Configuration ==============
private static readonly List<string> EnabledLogDomains = new List<string>();
public static void EnableDomain(string domain)
{
if (EnabledLogDomains.Contains(domain) == false)
{
EnabledLogDomains.Add(domain);
}
}
public static void DisableDomain(string domain)
{
if (EnabledLogDomains.Contains(domain))
{
EnabledLogDomains.Remove(domain);
}
}
// ============== Logging Action Configuration ==============
public static Action<string> LogAction = DefaultLogger;
// NOTEs are only logged if the domain is enabled.
// ERRORs are logged regardless.
public static void Note(string domain, string msg, params object[] vals)
{
if (EnabledLogDomains.Contains(domain))
{
LogAction(String.Format(msg, vals));
}
}
public static void Error(string domain, string msg, params object[] vals)
{
LogAction(string.Format(msg, vals));
}
// ============== Default Logger Action ==============
public static Stream HACK_LOG_STREAM;
private static readonly bool LogToConsole = false;
private static bool LogToFile = false;
private const string LogFilename = "bizhawk.txt";
private static StreamWriter writer;
private static void DefaultLogger(string message)
{
if (LogToConsole)
{
Console.WriteLine(message);
}
if (LogToFile && writer == null)
{
writer = new StreamWriter(LogFilename);
}
if (LogToFile)
{
writer.WriteLine(message);
writer.Flush();
}
}
}
}