From 6e8971d617da23b369d4e87c2692112fc949a1f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=E2=96=88=E2=96=88=E2=96=88=E2=96=88=E2=96=88?= Date: Tue, 30 Sep 2025 12:14:21 -0400 Subject: [PATCH] feat: logging --- src/SiteMonitor/Program.cs | 21 ++++++++++++++++++++ src/SiteMonitor/Views/MainWindow.axaml.cs | 7 ++++--- src/SiteMonitor/log4net.config | 24 +++++++++++++++++++++++ src/SiteMonitor/log4net.debug.config | 12 ++++++++++++ 4 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/SiteMonitor/log4net.config create mode 100644 src/SiteMonitor/log4net.debug.config diff --git a/src/SiteMonitor/Program.cs b/src/SiteMonitor/Program.cs index d0cbb2d..27f6431 100644 --- a/src/SiteMonitor/Program.cs +++ b/src/SiteMonitor/Program.cs @@ -1,16 +1,37 @@ using System; +using System.IO; using Avalonia; using Avalonia.ReactiveUI; +using log4net; +using log4net.Config; + namespace SiteMonitor; internal sealed class Program { + /// + /// The logger. + /// + private static readonly ILog LOG = LogManager.GetLogger(typeof(Program)); + // Initialization code. Don't use any Avalonia, third-party APIs or any // SynchronizationContext-reliant code before AppMain is called: things aren't initialized // yet and stuff might break. [STAThread] public static void Main(string[] args) { +#if DEBUG + XmlConfigurator.Configure(new FileInfo("log4net.debug.config")); +#else + XmlConfigurator.Configure(new FileInfo("log4net.config")); +#endif + + LOG.Info("Started application"); + + AppDomain.CurrentDomain.UnhandledException += (_, exceptArgs) => { + LOG.Fatal("Unhandled exception", exceptArgs.ExceptionObject as Exception); + }; + BuildAvaloniaApp() .StartWithClassicDesktopLifetime(args); } diff --git a/src/SiteMonitor/Views/MainWindow.axaml.cs b/src/SiteMonitor/Views/MainWindow.axaml.cs index 8849cb2..3d605b2 100644 --- a/src/SiteMonitor/Views/MainWindow.axaml.cs +++ b/src/SiteMonitor/Views/MainWindow.axaml.cs @@ -2,13 +2,14 @@ using System.Linq; using System.Threading.Tasks; +using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Microsoft.Extensions.DependencyInjection; using Nullinside.Api.Common.Desktop; -#if !DEBUG +#if !RELEASE using Avalonia.Threading; using SiteMonitor.ViewModels; @@ -72,12 +73,12 @@ protected override void OnInitialized() { if (serverVersion.name?.Equals(Constants.APP_VERSION, StringComparison.InvariantCultureIgnoreCase) ?? true) { // Had to add this because code clean up tools were removing the "redundant" return statement. // which was causing the check to always be ignored. -#if !DEBUG +#if !RELEASE return; #endif } -#if !DEBUG +#if !RELEASE var vm = ServiceProvider?.GetRequiredService(); if (null == vm) { return; diff --git a/src/SiteMonitor/log4net.config b/src/SiteMonitor/log4net.config new file mode 100644 index 0000000..bd2408f --- /dev/null +++ b/src/SiteMonitor/log4net.config @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SiteMonitor/log4net.debug.config b/src/SiteMonitor/log4net.debug.config new file mode 100644 index 0000000..59e6ecd --- /dev/null +++ b/src/SiteMonitor/log4net.debug.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file