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; } }