diff --git a/StudiApp/StudiApp/App.xaml.cs b/StudiApp/StudiApp/App.xaml.cs index c73987dc35c587d0e91d34c285f94bd13171096c..aafec14750d8a2f5b1f9cb0192b2c3ec7c07d68d 100644 --- a/StudiApp/StudiApp/App.xaml.cs +++ b/StudiApp/StudiApp/App.xaml.cs @@ -1,4 +1,7 @@ -using StudiApp.Models; +using MetroLog.Maui; +using StudiApp.Views; + +using StudiApp.Models; using StudiApp.Repository; namespace StudiApp; diff --git a/StudiApp/StudiApp/MauiProgram.cs b/StudiApp/StudiApp/MauiProgram.cs index bdf5d3fb5a805021b23d1186b79e61c05339f45c..61677da797ef62592acf6d8868c77a836c2d9402 100644 --- a/StudiApp/StudiApp/MauiProgram.cs +++ b/StudiApp/StudiApp/MauiProgram.cs @@ -1,7 +1,7 @@ -using Microsoft.Extensions.Logging; +using MetroLog.MicrosoftExtensions; +using MetroLog.Operators; using StudiApp.Models; using StudiApp.Repository; -using StudiApp.Services; using StudiApp.ViewModels; using StudiApp.Views; using Syncfusion.Maui.Core.Hosting; @@ -24,18 +24,31 @@ public static class MauiProgram .RegisterAppServices() .RegisterViewModels() .RegisterViews() - .RegisterDatabase(); + .RegisterDatabase() + .RegisterLogger(); -#if DEBUG - builder.Logging.AddDebug(); -#endif - return builder.Build(); + return builder.Build(); } + private static void RegisterLogger(this MauiAppBuilder mauiAppBuilder) + { + mauiAppBuilder.Logging.AddTraceLogger(_ => { }); + + mauiAppBuilder.Logging.AddStreamingFileLogger(options => + { + const string loggingFolder = "Logs"; + var path = Path.Combine(FileSystem.AppDataDirectory, loggingFolder); + + options.RetainDays = 60; + options.FolderPath = path; + }); + + mauiAppBuilder.Services.AddSingleton(LogOperatorRetriever.Instance); + } + public static MauiAppBuilder RegisterAppServices(this MauiAppBuilder mauiAppBuilder) { - mauiAppBuilder.Services.AddSingleton<ILoggerService, LoggerService>(); return mauiAppBuilder; } diff --git a/StudiApp/StudiApp/Services/ILoggerService.cs b/StudiApp/StudiApp/Services/ILoggerService.cs deleted file mode 100644 index f156c4d7e6b7056e52cb1862f572e899c1f44dfc..0000000000000000000000000000000000000000 --- a/StudiApp/StudiApp/Services/ILoggerService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace StudiApp.Services -{ - internal interface ILoggerService - { - } -} diff --git a/StudiApp/StudiApp/Services/LoggerService.cs b/StudiApp/StudiApp/Services/LoggerService.cs deleted file mode 100644 index 599a60e7eb95ed795ae829ac1b46728ce4357818..0000000000000000000000000000000000000000 --- a/StudiApp/StudiApp/Services/LoggerService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace StudiApp.Services -{ - internal class LoggerService : ILoggerService - { - } -} diff --git a/StudiApp/StudiApp/StudiApp.csproj b/StudiApp/StudiApp/StudiApp.csproj index 45c50ae5b4275292ca09a56de3cb060cfa629aef..3264928d5c46de7e93376ef8e536703814b3f27d 100644 --- a/StudiApp/StudiApp/StudiApp.csproj +++ b/StudiApp/StudiApp/StudiApp.csproj @@ -39,8 +39,16 @@ <!-- Raw Assets (also remove the "Resources\Raw" prefix) --> <MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" /> </ItemGroup> + <ItemGroup> + <Compile Remove="Services\Logs\**" /> + <EmbeddedResource Remove="Services\Logs\**" /> + <MauiCss Remove="Services\Logs\**" /> + <MauiXaml Remove="Services\Logs\**" /> + <None Remove="Services\Logs\**" /> + </ItemGroup> <ItemGroup> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" /> + <PackageReference Include="MetroLog.Maui" Version="2.1.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="7.0.0" /> <PackageReference Include="Syncfusion.Maui.Scheduler" Version="21.1.37" /> <PackageReference Include="sqlite-net-pcl" Version="1.8.116" /> @@ -49,6 +57,7 @@ <PackageReference Include="SQLitePCLRaw.bundle_green" Version="2.1.4" /> </ItemGroup> <ItemGroup> + <Folder Include="Services\" /> <Folder Include="Views\CoursesEditFragments" /> <Folder Include="Views\CoursesOverviewFragments" /> <Folder Include="Views\DashboardFragments" /> diff --git a/StudiApp/StudiApp/viewmodels/CoursesEditViewModel.cs b/StudiApp/StudiApp/viewmodels/CoursesEditViewModel.cs index 9779c9090cbc7fea4d83447dfe116699621c61cf..ebbc5377c1399c41f5c3aafa6646cd695f89a13f 100644 --- a/StudiApp/StudiApp/viewmodels/CoursesEditViewModel.cs +++ b/StudiApp/StudiApp/viewmodels/CoursesEditViewModel.cs @@ -1,17 +1,26 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; +using Microsoft.Extensions.Logging; namespace StudiApp.ViewModels { [QueryProperty("Text", "Text")] public partial class CoursesEditViewModel : ObservableObject { + private readonly ILogger _logger; + [ObservableProperty] private string _text; + public CoursesEditViewModel(ILogger<CoursesEditViewModel> logger) + { + _logger = logger; + } + [RelayCommandAttribute] async Task GoBack() { + _logger.LogInformation($"Go Back From {nameof(CoursesEditViewModel)}"); //Go to last on stack with ".." await Shell.Current.GoToAsync(".."); } diff --git a/StudiApp/StudiApp/viewmodels/DashboardViewModel.cs b/StudiApp/StudiApp/viewmodels/DashboardViewModel.cs index 4969b26922915bdd7e80056bcf246bac4589016d..b62661941295da78247b717776945cab6becac09 100644 --- a/StudiApp/StudiApp/viewmodels/DashboardViewModel.cs +++ b/StudiApp/StudiApp/viewmodels/DashboardViewModel.cs @@ -1,6 +1,7 @@ using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; +using Microsoft.Extensions.Logging; using StudiApp.Views; namespace StudiApp.ViewModels @@ -16,8 +17,11 @@ namespace StudiApp.ViewModels [ObservableProperty] private string _text = "Click me!"; - public DashboardViewModel() + private readonly ILogger _logger; + + public DashboardViewModel(ILogger<DashboardViewModel> logger) { + _logger = logger; _items = new ObservableCollection<string>(); } @@ -31,6 +35,8 @@ namespace StudiApp.ViewModels Items.Add(Text); + _logger.LogInformation($"Clicked Counter {Count} times."); + SemanticScreenReader.Announce(Text); }