提交功能

This commit is contained in:
Bob.Song
2026-02-08 16:58:32 +08:00
commit 9dd1e6c278
67 changed files with 4588 additions and 0 deletions

17
Log/ILog.cs Normal file
View File

@@ -0,0 +1,17 @@
namespace ACBuildService;
public interface ILog
{
void Info(string message);
void Info(string message, params object[] args);
void Warning(string message);
void Warning(string message, params object[] args);
void Error(string message);
void Error(string message, params object[] args);
void Trace(string message);
void Trace(string message, params object[] args);
void Debug(string message);
void Debug(string message, params object[] args);
void Fatal(string message);
void Fatal(string message, params object[] args);
}

165
Log/Log.cs Normal file
View File

@@ -0,0 +1,165 @@
using System.Runtime.CompilerServices;
namespace ACBuildService;
/// <summary>
/// 全局日志静态类
/// </summary>
public static class Log
{
private static ILog _log;
private static Func<ILog> _createLogger = NLogger.CreateInstance;
public static readonly List<LogInfo> LogList = new List<LogInfo>();
public static Func<ILog> 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; }
}

249
Log/NLog.cs Normal file
View File

@@ -0,0 +1,249 @@
using NLog;
using NLog.Conditions;
using NLog.Config;
using NLog.Targets;
using NLog.Targets.Wrappers;
namespace ACBuildService;
public class NLogger : ILog
{
private readonly Logger _log;
public static ILog CreateInstance()
{
return new NLogger();
}
public NLogger()
{
var path = "NLog.config";
if (File.Exists(path))
{
LogManager.Configuration = new XmlLoggingConfiguration(path);
}
else
{
var config = new LoggingConfiguration();
var serverDebug = new AsyncTargetWrapper();
serverDebug.WrappedTarget = new FileTarget("serverDebug")
{
OpenFileCacheTimeout = 10,
Layout =
"${longdate} | ${message} ${onexception:${exception:format=message} ${newline} ${stacktrace} ${newline}",
FileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.${date:format=yyyyMMddHH}.Debug.log",
ArchiveFileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.{#}.Debug.log",
ArchiveNumbering = ArchiveNumberingMode.Date,
ArchiveEvery = FileArchivePeriod.Hour,
ArchiveDateFormat = "yyyyMMddHH",
KeepFileOpen = true,
};
var serverInfo = new AsyncTargetWrapper();
serverInfo.WrappedTarget = new FileTarget("serverInfo")
{
OpenFileCacheTimeout = 10,
Layout =
"${longdate} ${message}",
FileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.${date:format=yyyyMMddHH}.Info.log",
ArchiveFileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.{#}.Info.log",
ArchiveNumbering = ArchiveNumberingMode.Date,
ArchiveEvery = FileArchivePeriod.Hour,
ArchiveDateFormat = "yyyyMMddHH",
KeepFileOpen = true,
};
var serverError = new AsyncTargetWrapper();
serverError.WrappedTarget = new FileTarget("serverError")
{
OpenFileCacheTimeout = 10,
Layout =
"${longdate} | ${message} ${onexception:${exception:format=message} ${newline} ${stacktrace} ${newline}",
FileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.${date:format=yyyyMMddHH}.Error.log",
ArchiveFileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.{#}.Error.log",
ArchiveNumbering = ArchiveNumberingMode.Date,
ArchiveEvery = FileArchivePeriod.Hour,
ArchiveDateFormat = "yyyyMMddHH",
KeepFileOpen = true,
};
var serverWarn = new AsyncTargetWrapper();
serverWarn.WrappedTarget = new FileTarget("serverWarn")
{
OpenFileCacheTimeout = 10,
Layout =
"${longdate} ${message}",
FileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.${date:format=yyyyMMddHH}.Warn.log",
ArchiveFileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.{#}.Warn.log",
ArchiveNumbering = ArchiveNumberingMode.Date,
ArchiveEvery = FileArchivePeriod.Hour,
ArchiveDateFormat = "yyyyMMddHH",
KeepFileOpen = true,
};
var serverFatal = new AsyncTargetWrapper();
serverFatal.WrappedTarget = new FileTarget("serverFatal")
{
OpenFileCacheTimeout = 10,
Layout =
"${longdate} | ${message} ${onexception:${exception:format=message} ${newline} ${stacktrace} ${newline}",
FileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.${date:format=yyyyMMddHH}.Fatal.log",
ArchiveFileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.{#}.Fatal.log",
ArchiveNumbering = ArchiveNumberingMode.Date,
ArchiveEvery = FileArchivePeriod.Hour,
ArchiveDateFormat = "yyyyMMddHH",
KeepFileOpen = true,
};
var serverTrace = new AsyncTargetWrapper();
serverTrace.WrappedTarget = new FileTarget("serverTrace")
{
OpenFileCacheTimeout = 10,
Layout =
"${longdate} | ${message} ${onexception:${exception:format=message} ${newline} ${stacktrace} ${newline}",
FileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.${date:format=yyyyMMddHH}.Trace.log",
ArchiveFileName = "${basedir}/Logs/${logger}.${var:appIdFormat}.{#}.Trace.log",
ArchiveNumbering = ArchiveNumberingMode.Date,
ArchiveEvery = FileArchivePeriod.Hour,
ArchiveDateFormat = "yyyyMMddHH",
KeepFileOpen = true,
};
var consoleTarget = new ColoredConsoleTarget()
{
Layout = "[${date:format=HH\\:mm\\:ss}]:${message} ${exception:format=message}"
};
var highlightRuleDebug = new ConsoleRowHighlightingRule
{
Condition = ConditionParser.ParseExpression("level == LogLevel.Debug"),
ForegroundColor = ConsoleOutputColor.Gray
};
consoleTarget.RowHighlightingRules.Add(highlightRuleDebug);
var highlightRuleTrace = new ConsoleRowHighlightingRule
{
Condition = ConditionParser.ParseExpression("level == LogLevel.Trace"),
ForegroundColor = ConsoleOutputColor.DarkGray
};
consoleTarget.RowHighlightingRules.Add(highlightRuleTrace);
var highlightRuleWarn = new ConsoleRowHighlightingRule
{
Condition = ConditionParser.ParseExpression("level == LogLevel.Warn"),
ForegroundColor = ConsoleOutputColor.Yellow
};
consoleTarget.RowHighlightingRules.Add(highlightRuleWarn);
var highlightRuleError = new ConsoleRowHighlightingRule
{
Condition = ConditionParser.ParseExpression("level == LogLevel.Error"),
ForegroundColor = ConsoleOutputColor.Red
};
consoleTarget.RowHighlightingRules.Add(highlightRuleError);
var highlightRuleFatal = new ConsoleRowHighlightingRule
{
Condition = ConditionParser.ParseExpression("level == LogLevel.Fatal"),
ForegroundColor = ConsoleOutputColor.Red,
BackgroundColor = ConsoleOutputColor.White
};
consoleTarget.RowHighlightingRules.Add(highlightRuleFatal);
config.AddRule(LogLevel.Trace, LogLevel.Trace, serverTrace);
config.AddRule(LogLevel.Error, LogLevel.Error, serverError);
config.AddRule(LogLevel.Warn, LogLevel.Warn, serverWarn);
config.AddRule(LogLevel.Debug, LogLevel.Debug, serverDebug);
config.AddRule(LogLevel.Fatal, LogLevel.Fatal, serverFatal);
config.AddRule(LogLevel.Info, LogLevel.Info, serverInfo);
//console
if (App.Settings.Debug)
{
config.AddRule(LogLevel.Trace, LogLevel.Fatal, consoleTarget);
}
else
{
config.AddRule(LogLevel.Trace, LogLevel.Trace, consoleTarget);
config.AddRule(LogLevel.Error, LogLevel.Error, consoleTarget);
config.AddRule(LogLevel.Warn, LogLevel.Warn, consoleTarget);
config.AddRule(LogLevel.Debug, LogLevel.Debug, consoleTarget);
config.AddRule(LogLevel.Fatal, LogLevel.Fatal, consoleTarget);
}
LogManager.Configuration = config;
}
LogManager.Configuration.Variables["appIdFormat"] = $"1";
LogManager.Configuration.Variables["currentDir"] = Environment.CurrentDirectory;
_log = LogManager.GetLogger("nbc");
}
public void Info(string message)
{
_log.Info(message);
}
public void Info(string message, params object[] args)
{
_log.Info(message, args);
}
public void Warning(string message)
{
_log.Warn(message);
}
public void Warning(string message, params object[] args)
{
_log.Warn(message, args);
}
public void Error(string message)
{
_log.Error(message);
}
public void Error(string message, params object[] args)
{
_log.Error(message, args);
}
public void Trace(string message)
{
_log.Trace(message);
}
public void Trace(string message, params object[] args)
{
_log.Trace(message, args);
}
public void Debug(string message)
{
_log.Debug(message);
}
public void Debug(string message, params object[] args)
{
_log.Debug(message, args);
}
public void Fatal(string message)
{
_log.Fatal(message);
}
public void Fatal(string message, params object[] args)
{
_log.Fatal(message, args);
}
}