getting back and improving logging.

This commit is contained in:
Lucca Faria Ferri 2023-06-12 04:39:58 -03:00
parent 94aa570ca2
commit 9519d47713
4 changed files with 56 additions and 33 deletions

View File

@ -56,14 +56,17 @@ public class AnsiTarget : LogTarget
}); });
} }
public static void StopIfRunning() public static void StopIfRunning(bool clear = false)
{ {
CancellationTokenSource.Cancel(); CancellationTokenSource.Cancel();
while(!_shutdown) while(!_shutdown)
Thread.Sleep(100); Thread.Sleep(100);
Thread.Sleep(1000); Thread.Sleep(1000);
AnsiConsole.Clear(); if (clear)
AnsiConsole.Cursor.SetPosition(0,0); {
AnsiConsole.Clear();
AnsiConsole.Cursor.SetPosition(0, 0);
}
} }
/// <summary> /// <summary>
@ -109,7 +112,7 @@ public class AnsiTarget : LogTarget
/// </summary> /// </summary>
/// <param name="x"></param> /// <param name="x"></param>
/// <returns></returns> /// <returns></returns>
string Cleanup(string x) => Beautify(x.Replace("[", "[[").Replace("]", "]]").Replace("$[[/]]$", "[/]").Replace("$[[", "[").Replace("]]$", "]")); public static string Cleanup(string x) => Beautify(x.Replace("[", "[[").Replace("]", "]]").Replace("$[[/]]$", "[/]").Replace("$[[", "[").Replace("]]$", "]"));
public override void LogMessage(Logger.Level level, string logger, string message) public override void LogMessage(Logger.Level level, string logger, string message)
{ {

View File

@ -26,7 +26,7 @@ namespace DiIiS_NA.Core.Logging
public override void LogMessage(Logger.Level level, string logger, string message) public override void LogMessage(Logger.Level level, string logger, string message)
{ {
var timeStamp = IncludeTimeStamps ? "[[" + DateTime.Now.ToString(TimeStampFormat) + "]] " : ""; var timeStamp = IncludeTimeStamps ? "[[" + DateTime.Now.ToString(TimeStampFormat) + "]] " : "";
AnsiConsole.MarkupLine($"{timeStamp}{SetColor(level, true)}[[{level.ToString(),8}]][/] {SetColor(level)}[[{Cleanup(logger),20}]]: {Cleanup(message)}[/]"); AnsiConsole.MarkupLine($"{timeStamp}{SetColor(level, true)}[[{level.ToString(),8}]][/] {SetColor(level)}[[{Cleanup(logger),20}]]: {AnsiTarget.Cleanup(message)}[/]");
} }
/// <param name="level">Log level.</param> /// <param name="level">Log level.</param>

View File

@ -74,6 +74,12 @@
set => Set(nameof(TimeStampFormat), value); set => Set(nameof(TimeStampFormat), value);
} }
public bool MaximizeWhenEnabled
{
get => GetBoolean(nameof(MaximizeWhenEnabled), false);
set => Set(nameof(MaximizeWhenEnabled), value);
}
public LogTargetConfig(string loggerName) : base(loggerName) { } public LogTargetConfig(string loggerName) : base(loggerName) { }
} }
} }

View File

@ -70,7 +70,21 @@ namespace DiIiS_NA
public static TypeBuildEnum TypeBuild => TypeBuildEnum.Beta; public static TypeBuildEnum TypeBuild => TypeBuildEnum.Beta;
private static bool DiabloCoreEnabled = DiIiS_NA.GameServer.GameServerConfig.Instance.CoreActive; private static bool DiabloCoreEnabled = DiIiS_NA.GameServer.GameServerConfig.Instance.CoreActive;
static async Task StartAsync() static void WriteBanner()
{
void RightTextRule(string text, string ruleStyle) => AnsiConsole.Write(new Rule(text).RuleStyle(ruleStyle));
string Url(string url) => $"[link={url}]{url}[/]";
RightTextRule("[dodgerblue1]Blizz[/][deepskyblue2]less[/]", "steelblue1");
RightTextRule($"[dodgerblue3]Build [/][deepskyblue3]{Build}[/]", "steelblue1_1");
RightTextRule($"[dodgerblue3]Stage [/][deepskyblue3]{Stage}[/]", "steelblue1_1");
RightTextRule($"[deepskyblue3]{TypeBuild}[/]", "steelblue1_1");
RightTextRule($"Diablo III [red]RoS 2.7.4.84161[/] - {Url("https://github.com/blizzless/blizzless-diiis")}",
"red");
AnsiConsole.MarkupLine("");
AnsiConsole.MarkupLine("");
}
static async Task StartAsync(string[] args)
{ {
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler; AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
@ -79,26 +93,16 @@ namespace DiIiS_NA
string name = $"Blizzless: Build {Build}, Stage: {Stage} - {TypeBuild}"; string name = $"Blizzless: Build {Build}, Stage: {Stage} - {TypeBuild}";
SetTitle(name); SetTitle(name);
Maximize(); if (LogConfig.Instance.Targets.Any(x => x.MaximizeWhenEnabled && x.Enabled))
AnsiConsole.Write(new Rule("[dodgerblue1]Blizz[/][deepskyblue2]less[/]").RuleStyle("steelblue1")); Maximize();
AnsiConsole.Write(new Rule($"[dodgerblue3]Build [/][deepskyblue3]{Build}[/]").RightJustified() WriteBanner();
.RuleStyle("steelblue1_1"));
AnsiConsole.Write(new Rule($"[dodgerblue3]Stage [/][deepskyblue3]{Stage}[/]").RightJustified()
.RuleStyle("steelblue1_1"));
AnsiConsole.Write(new Rule($"[deepskyblue3]{TypeBuild}[/]").RightJustified().RuleStyle("steelblue1_1"));
AnsiConsole.Write(
new Rule(
$"Diablo III [red]RoS 2.7.4.84161[/] - [link=https://github.com/blizzless/blizzless-diiis]https://github.com/blizzless/blizzless-diiis[/]")
.RuleStyle("red"));
AnsiConsole.MarkupLine("");
Console.WriteLine();
InitLoggers(); InitLoggers();
#if DEBUG #if DEBUG
DiabloCoreEnabled = true; DiabloCoreEnabled = true;
Logger.Info("Forcing Diablo III Core to be $[green]$enabled$[/]$ on debug mode."); Logger.Info("Forcing Diablo III Core to be $[green]$enabled$[/]$ on debug mode.");
#else
if (!DiabloCoreEnabled)
Logger.Warning("Diablo III Core is $[red]$disabled$[/]$.");
#endif #endif
#pragma warning disable CS4014 #pragma warning disable CS4014
@ -274,11 +278,11 @@ namespace DiIiS_NA
await Task.Delay(TimeSpan.FromMinutes(1)); await Task.Delay(TimeSpan.FromMinutes(1));
} }
Shutdown(delay: 25); Shutdown();
} }
catch (Exception e) catch (Exception e)
{ {
Shutdown(e, delay: 200); Shutdown(e);
} }
finally finally
{ {
@ -288,11 +292,11 @@ namespace DiIiS_NA
} }
} }
private static void Shutdown(Exception exception = null, int delay = 200) private static void Shutdown(Exception exception = null)
{ {
// if (!IsTargetEnabled("ansi")) // if (!IsTargetEnabled("ansi"))
{ {
AnsiTarget.StopIfRunning(); AnsiTarget.StopIfRunning(IsTargetEnabled("ansi"));
if (exception != null) if (exception != null)
{ {
AnsiConsole.WriteLine("An unhandled exception occured at initialization. Please report this to the developers."); AnsiConsole.WriteLine("An unhandled exception occured at initialization. Please report this to the developers.");
@ -300,24 +304,34 @@ namespace DiIiS_NA
} }
AnsiConsole.Progress().Start(ctx => AnsiConsole.Progress().Start(ctx =>
{ {
var task = ctx.AddTask("[red]Shutting down...[/]"); var task = ctx.AddTask("[darkred_1]Shutting down[/] [white]in[/] [red underline]10 seconds[/]");
for (int i = 0; i < 100; i++) for (int i = 1; i < 11; i++)
{ {
task.Increment(1); task.Description = $"[darkred_1]Shutting down[/] [white]in[/] [red underline]{11 - i} seconds[/]";
Thread.Sleep(delay); for (int j = 0; j < 10; j++)
{
task.Increment(1);
Thread.Sleep(100);
}
} }
task.Description = $"[darkred_1]Shutting down[/]";
task.StopTask();
}); });
} }
Environment.Exit(-1); Environment.Exit(exception is null ? 0 : -1);
} }
[HandleProcessCorruptedStateExceptions] [HandleProcessCorruptedStateExceptions]
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)] [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
static async Task Main() static async Task Main(string[] args)
{ {
try try
{ {
await StartAsync(); args ??= Array.Empty<string>();
await StartAsync(args);
} }
catch (Exception ex) catch (Exception ex)
{ {