Improved logging. Updated nuget packages

This commit is contained in:
Robert McRackan 2019-11-26 10:42:38 -05:00
parent 7a4bd639fb
commit 1cecd4ba2e
17 changed files with 100 additions and 59 deletions

View File

@ -9,21 +9,34 @@ namespace ApplicationServices
{ {
public static class LibraryCommands public static class LibraryCommands
{ {
public static async Task<(int totalCount, int newCount)> IndexLibraryAsync(ILoginCallback callback) public static async Task<(int totalCount, int newCount)> ImportLibraryAsync(ILoginCallback callback)
{
try
{ {
var audibleApiActions = new AudibleApiActions(); var audibleApiActions = new AudibleApiActions();
var items = await audibleApiActions.GetAllLibraryItemsAsync(callback); var items = await audibleApiActions.GetAllLibraryItemsAsync(callback);
var totalCount = items.Count; var totalCount = items.Count;
Serilog.Log.Logger.Debug($"GetAllLibraryItems: Total count {totalCount}");
var libImporter = new LibraryImporter(); var libImporter = new LibraryImporter();
var newCount = await Task.Run(() => libImporter.Import(items)); var newCount = await Task.Run(() => libImporter.Import(items));
Serilog.Log.Logger.Debug($"Import: New count {newCount}");
await Task.Run(() => SearchEngineCommands.FullReIndex()); await Task.Run(() => SearchEngineCommands.FullReIndex());
Serilog.Log.Logger.Debug("FullReIndex: success");
return (totalCount, newCount); return (totalCount, newCount);
} }
catch (Exception ex)
{
Serilog.Log.Logger.Error(ex, "Error importing library");
throw;
}
}
public static int UpdateTags(this LibationContext context, Book book, string newTags) public static int UpdateTags(this LibationContext context, Book book, string newTags)
{
try
{ {
book.UserDefinedItem.Tags = newTags; book.UserDefinedItem.Tags = newTags;
@ -34,5 +47,11 @@ namespace ApplicationServices
return qtyChanges; return qtyChanges;
} }
catch (Exception ex)
{
Serilog.Log.Logger.Error(ex, "Error updating tags");
throw;
}
}
} }
} }

View File

@ -12,13 +12,13 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0"> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.1">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0"> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.1">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>

View File

@ -83,9 +83,9 @@ namespace FileManager
catch (IOException) catch (IOException)
{ {
try { resave(); } try { resave(); }
catch (IOException) catch (IOException ex)
{ {
Console.WriteLine("...that's not good"); Serilog.Log.Logger.Error(ex, "Error saving FilePaths.json");
throw; throw;
} }
} }

View File

@ -105,9 +105,9 @@ namespace FileManager
catch (IOException) catch (IOException)
{ {
try { resave(); } try { resave(); }
catch (IOException) catch (IOException ex)
{ {
Console.WriteLine("...that's not good"); Serilog.Log.Logger.Error(ex, "Error saving QuickFilters.json");
throw; throw;
} }
} }

View File

@ -28,7 +28,7 @@ namespace InternalUtilities
private async Task<List<Item>> getItemsAsync(ILoginCallback callback) private async Task<List<Item>> getItemsAsync(ILoginCallback callback)
{ {
var api = await getApiAsync(callback); var api = await EzApiCreator.GetApiAsync(AudibleApiStorage.IdentityTokensFile, callback, Configuration.Instance.LocaleCountryCode);
var items = await AudibleApiExtensions.GetAllLibraryItemsAsync(api); var items = await AudibleApiExtensions.GetAllLibraryItemsAsync(api);
// remove episode parents // remove episode parents
@ -62,20 +62,6 @@ namespace InternalUtilities
return items; return items;
} }
private async Task<Api> getApiAsync(ILoginCallback callback)
{
try
{
return await EzApiCreator.GetApiAsync(AudibleApiStorage.IdentityTokensFile, callback, Configuration.Instance.LocaleCountryCode);
}
catch (Exception ex)
{
Serilog.Log.Logger.Error(ex, "Error getting Audible API");
throw;
}
}
private static List<IValidator> getValidators() private static List<IValidator> getValidators()
{ {
var type = typeof(IValidator); var type = typeof(IValidator);

View File

@ -27,11 +27,11 @@ namespace InternalUtilities
ResponseGroups = LibraryOptions.ResponseGroupOptions.ALL_OPTIONS ResponseGroups = LibraryOptions.ResponseGroupOptions.ALL_OPTIONS
}); });
string pageStr = null; var pageStr = page.ToString();
LibraryDtoV10 libResult; LibraryDtoV10 libResult;
try try
{ {
pageStr = page.ToString();
// important! use this convert method // important! use this convert method
libResult = LibraryDtoV10.FromJson(pageStr); libResult = LibraryDtoV10.FromJson(pageStr);
} }
@ -43,6 +43,8 @@ namespace InternalUtilities
if (!libResult.Items.Any()) if (!libResult.Items.Any())
break; break;
else
Serilog.Log.Logger.Debug($"Page {i}: {libResult.Items.Length} results");
allItems.AddRange(libResult.Items); allItems.AddRange(libResult.Items);
} }

View File

@ -13,8 +13,18 @@ namespace LibationWinForm.BookLiberation
InitializeComponent(); InitializeComponent();
} }
public void AppendError(Exception ex) => AppendText("ERROR: " + ex.Message); public void AppendError(Exception ex)
public void AppendText(string text) => logTb.UIThread(() => logTb.AppendText($"{DateTime.Now} {text}{Environment.NewLine}")); {
Serilog.Log.Logger.Error(ex, "Automated backup: error");
appendText("ERROR: " + ex.Message);
}
public void AppendText(string text)
{
Serilog.Log.Logger.Debug($"Automated backup: {text}");
appendText(text);
}
private void appendText(string text)
=> logTb.UIThread(() => logTb.AppendText($"{DateTime.Now} {text}{Environment.NewLine}"));
public void FinalizeUI() public void FinalizeUI()
{ {

View File

@ -13,11 +13,10 @@ namespace LibationWinForm.BookLiberation
InitializeComponent(); InitializeComponent();
} }
System.IO.TextWriter origOut = Console.Out; System.IO.TextWriter origOut { get; } = Console.Out;
private void DecryptForm_Load(object sender, EventArgs e) private void DecryptForm_Load(object sender, EventArgs e)
{ {
// redirect Console.WriteLine to console, textbox // redirect Console.WriteLine to console, textbox
System.IO.TextWriter origOut = Console.Out;
var controlWriter = new RichTextBoxTextWriter(this.rtbLog); var controlWriter = new RichTextBoxTextWriter(this.rtbLog);
var multiLogger = new MultiTextWriter(origOut, controlWriter); var multiLogger = new MultiTextWriter(origOut, controlWriter);
Console.SetOut(multiLogger); Console.SetOut(multiLogger);
@ -58,12 +57,18 @@ namespace LibationWinForm.BookLiberation
public void SetCoverImage(byte[] coverBytes) public void SetCoverImage(byte[] coverBytes)
=> pictureBox1.UIThread(() => pictureBox1.Image = ImageReader.ToImage(coverBytes)); => pictureBox1.UIThread(() => pictureBox1.Image = ImageReader.ToImage(coverBytes));
public static void AppendError(Exception ex) => AppendText("ERROR: " + ex.Message); public void AppendError(Exception ex)
public static void AppendText(string text) => {
// redirected to log textbox Serilog.Log.Logger.Error(ex, "Decrypt form: error");
Console.WriteLine($"{DateTime.Now} {text}") appendText("ERROR: " + ex.Message);
//logTb.UIThread(() => logTb.AppendText($"{DateTime.Now} {text}{Environment.NewLine}")) }
; public void AppendText(string text)
{
Serilog.Log.Logger.Debug($"Decrypt form: {text}");
appendText(text);
}
private void appendText(string text) => Console.WriteLine($"{DateTime.Now} {text}");
public void UpdateProgress(int percentage) => progressBar1.UIThread(() => progressBar1.Value = percentage); public void UpdateProgress(int percentage) => progressBar1.UIThread(() => progressBar1.Value = percentage);
} }

View File

@ -19,12 +19,11 @@ namespace LibationWinForm
{ {
try try
{ {
(TotalBooksProcessed, NewBooksAdded) = await LibraryCommands.IndexLibraryAsync(new Login.WinformResponder()); (TotalBooksProcessed, NewBooksAdded) = await LibraryCommands.ImportLibraryAsync(new Login.WinformResponder());
} }
catch (Exception ex) catch (Exception ex)
{ {
var msg = "Error importing library. Please try again. If this happens after 2 or 3 tries, contact administrator"; var msg = "Error importing library. Please try again. If this still happens after 2 or 3 tries, stop and contact administrator";
Serilog.Log.Logger.Error(ex, msg);
MessageBox.Show(msg, "Error importing library", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(msg, "Error importing library", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Windows.Forms; using System.Windows.Forms;
using Dinah.Core.Logging;
using Serilog; using Serilog;
namespace LibationWinForm namespace LibationWinForm
@ -45,11 +46,29 @@ Go to Import > Scan Library
private static void init() private static void init()
{ {
// default. for reference. output example:
// 2019-11-26 08:48:40.224 -05:00 [DBG] Begin Libation
var default_outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}";
// with class and method info. output example:
// 2019-11-26 08:48:40.224 -05:00 [DBG] (at LibationWinForm.Program.init()) Begin Libation
var code_outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] (at {Caller}) {Message:lj}{NewLine}{Exception}";
var logPath = System.IO.Path.Combine(FileManager.Configuration.Instance.LibationFiles, "Log.log"); var logPath = System.IO.Path.Combine(FileManager.Configuration.Instance.LibationFiles, "Log.log");
Log.Logger = new LoggerConfiguration() Log.Logger = new LoggerConfiguration()
.Enrich.WithCaller()
.MinimumLevel.Debug() .MinimumLevel.Debug()
.WriteTo.File(logPath, rollingInterval: RollingInterval.Month) .WriteTo.File(logPath,
rollingInterval: RollingInterval.Month,
outputTemplate: code_outputTemplate)
.CreateLogger(); .CreateLogger();
Log.Logger.Debug("Begin Libation");
// .Here() captures debug info via System.Runtime.CompilerServices attributes. Warning: expensive
//var withLineNumbers_outputTemplate = "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message}{NewLine}in method {MemberName} at {FilePath}:{LineNumber}{NewLine}{Exception}{NewLine}";
//Log.Logger.Here().Debug("Begin Libation. Debug with line numbers");
} }
} }
} }

View File

@ -1,6 +1,7 @@
-- begin VERSIONING --------------------------------------------------------------------------------------------------------------------- -- begin VERSIONING ---------------------------------------------------------------------------------------------------------------------
https://github.com/rmcrackan/Libation/releases https://github.com/rmcrackan/Libation/releases
v3.1-beta.6 : Improved logging
v3.1-beta.5 : Improved importing v3.1-beta.5 : Improved importing
v3.1-beta.4 : Added beta-specific logging v3.1-beta.4 : Added beta-specific logging
v3.1-beta.3 : fixed known performance issue: Full-screen grid is slow to respond loading when books aren't liberated v3.1-beta.3 : fixed known performance issue: Full-screen grid is slow to respond loading when books aren't liberated