using System.Runtime.CompilerServices;
namespace ACBuildService;
///
/// 全局日志静态类
///
public static class Log
{
private static ILog _log;
private static Func _createLogger = NLogger.CreateInstance;
public static readonly List LogList = new List();
public static Func CreateLogger
{
get => _createLogger;
set
{
_createLogger = value;
_log = _createLogger();
}
}
static Log()
{
_log = CreateLogger();
}
#region Info
public static void Info(string msg)
{
_log.Info(msg);
AddLog(msg);
}
public static void Info(ref DefaultInterpolatedStringHandler message)
{
var msg = message.ToStringAndClear();
_log.Info(msg);
AddLog(msg);
}
#endregion
#region Warning
public static void Warning(string msg)
{
_log.Warning(msg);
AddLog(msg, 1);
}
public static void Warning(ref DefaultInterpolatedStringHandler message)
{
var msg = message.ToStringAndClear();
_log.Warning(msg);
AddLog(msg, 1);
}
#endregion
#region Error
public static void Error(string msg)
{
_log.Error(msg);
AddLog(msg, 2);
}
public static void Error(Exception msg)
{
_log.Error(msg.ToString());
AddLog(msg.ToString(), 2);
}
public static void Error(ref DefaultInterpolatedStringHandler message)
{
var msg = message.ToStringAndClear();
_log.Error(msg);
AddLog(msg, 2);
}
#endregion
#region Trace
public static void Trace(string msg)
{
_log.Trace(msg);
AddLog(msg, 4);
}
public static void Trace(ref DefaultInterpolatedStringHandler message)
{
_log.Trace(message.ToStringAndClear());
AddLog(message.ToStringAndClear(), 4);
}
public static void TraceInfo(string msg)
{
_log.Trace(msg);
AddLog(msg, 4);
}
#endregion
#region Debug
public static void Debug(string msg)
{
_log.Debug(msg);
AddLog(msg, 4);
}
public static void Debug(ref DefaultInterpolatedStringHandler message)
{
_log.Debug(message.ToStringAndClear());
AddLog(message.ToStringAndClear(), 4);
}
#endregion
#region Fatal
public static void Fatal(string message)
{
_log.Fatal(message);
AddLog(message, 5);
}
public static void Fatal(string message, params object[] args)
{
_log.Fatal(message, args);
AddLog(string.Format(message, args), 5);
}
#endregion
private static void AddLog(string msg, int level = 0)
{
if (LogList.Count > 1000)
{
LogList.RemoveAt(0);
}
LogInfo log = new LogInfo
{
message = msg,
level = level,
timestamp = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss.fff")
};
LogList.Add(log);
}
}
[Serializable]
public class LogInfo
{
public string timestamp { get; set; }
public int level { get; set; }
public string message { get; set; }
}