Skip to content

Commit 743df00

Browse files
jschick04NikTilton
authored andcommitted
Refactored logger so allocations only happen if an event gets logged
1 parent 70bbd88 commit 743df00

File tree

49 files changed

+905
-483
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+905
-483
lines changed

src/Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<PackageVersion Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
77
<PackageVersion Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
88
<PackageVersion Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="$(MauiVersion)" />
9+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.5" />
910
<PackageVersion Include="System.CommandLine" Version="2.0.5" />
1011
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.5" />
1112
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.7.2" />

src/EventLogExpert.EventDbTool/CreateDatabaseCommand.cs

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44
using EventLogExpert.Eventing.EventProviderDatabase;
55
using EventLogExpert.Eventing.Helpers;
66
using EventLogExpert.Eventing.Providers;
7-
using Microsoft.Extensions.Logging;
7+
using Microsoft.Extensions.DependencyInjection;
88
using System.CommandLine;
99

1010
namespace EventLogExpert.EventDbTool;
1111

12-
public sealed class CreateDatabaseCommand : DbToolCommand
12+
public sealed class CreateDatabaseCommand(ITraceLogger logger) : DbToolCommand(logger)
1313
{
14-
private static readonly ITraceLogger s_logger = new TraceLogger(LogLevel.Information);
15-
1614
public static Command GetCommand()
1715
{
1816
Command createDatabaseCommand = new("create", "Creates a new event database.");
@@ -47,26 +45,30 @@ public static Command GetCommand()
4745
createDatabaseCommand.Options.Add(skipProvidersInFileOption);
4846
createDatabaseCommand.Options.Add(verboseOption);
4947

50-
createDatabaseCommand.SetAction(result => CreateDatabase(
51-
result.GetRequiredValue(fileArgument),
52-
result.GetValue(filterOption),
53-
result.GetValue(verboseOption),
54-
result.GetValue(skipProvidersInFileOption)));
48+
createDatabaseCommand.SetAction(result =>
49+
{
50+
using var sp = Program.BuildServiceProvider(result.GetValue(verboseOption));
51+
new CreateDatabaseCommand(sp.GetRequiredService<ITraceLogger>())
52+
.CreateDatabase(
53+
result.GetRequiredValue(fileArgument),
54+
result.GetValue(filterOption),
55+
result.GetValue(skipProvidersInFileOption));
56+
});
5557

5658
return createDatabaseCommand;
5759
}
5860

59-
private static void CreateDatabase(string path, string? filter, bool verboseLogging, string? skipProvidersInFile)
61+
private void CreateDatabase(string path, string? filter, string? skipProvidersInFile)
6062
{
6163
if (File.Exists(path))
6264
{
63-
Console.WriteLine($"Cannot create database because file already exists: {path}");
65+
Logger.Error($"Cannot create database because file already exists: {path}");
6466
return;
6567
}
6668

6769
if (Path.GetExtension(path) != ".db")
6870
{
69-
Console.WriteLine("File extension must be .db.");
71+
Logger.Error($"File extension must be .db.");
7072
return;
7173
}
7274

@@ -76,25 +78,25 @@ private static void CreateDatabase(string path, string? filter, bool verboseLogg
7678
{
7779
if (!File.Exists(skipProvidersInFile))
7880
{
79-
Console.WriteLine($"File not found: {skipProvidersInFile}");
81+
Logger.Error($"File not found: {skipProvidersInFile}");
82+
return;
8083
}
8184

82-
using var skipDbContext = new EventProviderDbContext(skipProvidersInFile, true);
85+
using var skipDbContext = new EventProviderDbContext(skipProvidersInFile, true, Logger);
8386

8487
foreach (var provider in skipDbContext.ProviderDetails)
8588
{
8689
skipProviderNames.Add(provider.ProviderName);
8790
}
8891

89-
Console.WriteLine($"Found {skipProviderNames.Count} providers in file {skipProvidersInFile}. " +
90-
"These will not be included in the new database.");
92+
Logger.Info($"Found {skipProviderNames.Count} providers in file {skipProvidersInFile}. These will not be included in the new database.");
9193
}
9294

9395
var providerNames = GetLocalProviderNames(filter);
9496

9597
if (!providerNames.Any())
9698
{
97-
Console.WriteLine($"No providers found matching filter {filter}.");
99+
Logger.Warn($"No providers found matching filter {filter}.");
98100
return;
99101
}
100102

@@ -104,16 +106,16 @@ private static void CreateDatabase(string path, string? filter, bool verboseLogg
104106

105107
if (numberSkipped > 0)
106108
{
107-
Console.WriteLine($"{numberSkipped} providers were skipped due to being present in the specified database.");
109+
Logger.Info($"{numberSkipped} providers were skipped due to being present in the specified database.");
108110
}
109111

110-
using var dbContext = new EventProviderDbContext(path, false);
112+
using var dbContext = new EventProviderDbContext(path, false, Logger);
111113

112114
LogProviderDetailHeader(providerNamesNotSkipped);
113115

114116
foreach (var providerName in providerNamesNotSkipped)
115117
{
116-
var provider = new EventMessageProvider(providerName, verboseLogging ? s_logger : null);
118+
var provider = new EventMessageProvider(providerName, Logger);
117119

118120
var details = provider.LoadProviderDetails();
119121

@@ -122,11 +124,11 @@ private static void CreateDatabase(string path, string? filter, bool verboseLogg
122124
LogProviderDetails(details);
123125
}
124126

125-
Console.WriteLine();
126-
Console.WriteLine("Saving database. Please wait...");
127+
Logger.Info($"");
128+
Logger.Info($"Saving database. Please wait...");
127129

128130
dbContext.SaveChanges();
129131

130-
Console.WriteLine("Done!");
132+
Logger.Info($"Done!");
131133
}
132134
}
Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
// // Copyright (c) Microsoft Corporation.
22
// // Licensed under the MIT License.
33

4+
using EventLogExpert.Eventing.Helpers;
45
using EventLogExpert.Eventing.Providers;
56
using EventLogExpert.Eventing.Readers;
67
using System.Text.RegularExpressions;
78

89
namespace EventLogExpert.EventDbTool;
910

10-
public class DbToolCommand
11+
public class DbToolCommand(ITraceLogger logger)
1112
{
12-
private static string s_providerDetailFormat = "{0, -14} {1, 8} {2, 8} {3, 8} {4, 8} {5, 8}";
13+
private string _providerDetailFormat = "{0, -14} {1, 8} {2, 8} {3, 8} {4, 8} {5, 8}";
14+
15+
protected ITraceLogger Logger => logger;
1316

1417
protected static List<string> GetLocalProviderNames(string? filter)
1518
{
@@ -23,24 +26,29 @@ protected static List<string> GetLocalProviderNames(string? filter)
2326
return providers;
2427
}
2528

26-
protected static void LogProviderDetailHeader(IEnumerable<string> providerNames)
29+
protected void LogProviderDetailHeader(IEnumerable<string> providerNames)
2730
{
2831
var maxNameLength = providerNames.Any() ? providerNames.Max(p => p.Length) : 14;
29-
if (maxNameLength < 14) maxNameLength = 14;
30-
s_providerDetailFormat = "{0, -" + maxNameLength + "} {1, 8} {2, 8} {3, 8} {4, 8} {5, 8} {6, 8}";
31-
Console.WriteLine(s_providerDetailFormat, "Provider Name", "Events", "Parameters", "Keywords", "Opcodes", "Tasks", "Messages");
32+
if (maxNameLength < 14) { maxNameLength = 14; }
33+
34+
_providerDetailFormat = "{0, -" + maxNameLength + "} {1, 8} {2, 8} {3, 8} {4, 8} {5, 8} {6, 8}";
35+
36+
var header = string.Format(_providerDetailFormat, "Provider Name", "Events", "Parameters", "Keywords", "Opcodes", "Tasks", "Messages");
37+
Logger.Info($"{header}");
3238
}
3339

34-
protected static void LogProviderDetails(ProviderDetails details)
40+
protected void LogProviderDetails(ProviderDetails details)
3541
{
36-
Console.WriteLine(
37-
s_providerDetailFormat,
42+
var line = string.Format(
43+
_providerDetailFormat,
3844
details.ProviderName,
39-
details.Events.Count(),
45+
details.Events.Count,
4046
details.Parameters.Count(),
4147
details.Keywords.Count,
4248
details.Opcodes.Count,
4349
details.Tasks.Count,
44-
details.Messages.Count());
50+
details.Messages.Count);
51+
52+
Logger.Info($"{line}");
4553
}
4654
}

src/EventLogExpert.EventDbTool/DiffDatabaseCommand.cs

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
// // Licensed under the MIT License.
33

44
using EventLogExpert.Eventing.EventProviderDatabase;
5+
using EventLogExpert.Eventing.Helpers;
56
using EventLogExpert.Eventing.Providers;
7+
using Microsoft.Extensions.DependencyInjection;
68
using System.CommandLine;
79

810
namespace EventLogExpert.EventDbTool;
911

10-
public class DiffDatabaseCommand : DbToolCommand
12+
public class DiffDatabaseCommand(ITraceLogger logger) : DbToolCommand(logger)
1113
{
1214
public static Command GetCommand()
1315
{
@@ -41,66 +43,63 @@ public static Command GetCommand()
4143
diffDatabaseCommand.Arguments.Add(newDbArgument);
4244
diffDatabaseCommand.Options.Add(verboseOption);
4345

44-
diffDatabaseCommand.SetAction(action => DiffDatabase(
45-
action.GetRequiredValue(dbOneArgument),
46-
action.GetRequiredValue(dbTwoArgument),
47-
action.GetRequiredValue(newDbArgument),
48-
action.GetValue(verboseOption)));
46+
diffDatabaseCommand.SetAction(action =>
47+
{
48+
using var sp = Program.BuildServiceProvider(action.GetValue(verboseOption));
49+
new DiffDatabaseCommand(sp.GetRequiredService<ITraceLogger>())
50+
.DiffDatabase(
51+
action.GetRequiredValue(dbOneArgument),
52+
action.GetRequiredValue(dbTwoArgument),
53+
action.GetRequiredValue(newDbArgument));
54+
});
4955

5056
return diffDatabaseCommand;
5157
}
5258

53-
private static void DiffDatabase(string dbOne, string dbTwo, string newDb, bool verbose)
59+
private void DiffDatabase(string dbOne, string dbTwo, string newDb)
5460
{
5561
foreach (var path in new[] { dbOne, dbTwo })
5662
{
5763
if (File.Exists(path)) { continue; }
5864

59-
Console.WriteLine($"File not found: {path}");
65+
Logger.Error($"File not found: {path}");
6066
return;
6167
}
6268

6369
if (File.Exists(newDb))
6470
{
65-
Console.WriteLine($"File already exists: {newDb}");
71+
Logger.Error($"File already exists: {newDb}");
6672
return;
6773
}
6874

6975
if (Path.GetExtension(newDb) != ".db")
7076
{
71-
Console.WriteLine("New db path must have a .db extension.");
77+
Logger.Error($"New db path must have a .db extension.");
7278
return;
7379
}
7480

7581
var dbOneProviderNames = new HashSet<string>();
7682

77-
using (var dbOneContext = new EventProviderDbContext(dbOne, true))
83+
using (var dbOneContext = new EventProviderDbContext(dbOne, true, Logger))
7884
{
7985
dbOneContext.ProviderDetails.Select(p => p.ProviderName).ToList()
8086
.ForEach(name => dbOneProviderNames.Add(name));
8187
}
8288

8389
var providersCopied = new List<ProviderDetails>();
8490

85-
using var dbTwoContext = new EventProviderDbContext(dbTwo, true);
86-
using var newDbContext = new EventProviderDbContext(newDb, false);
91+
using var dbTwoContext = new EventProviderDbContext(dbTwo, true, Logger);
92+
using var newDbContext = new EventProviderDbContext(newDb, false, Logger);
8793

8894
foreach (var details in dbTwoContext.ProviderDetails)
8995
{
9096
if (dbOneProviderNames.Contains(details.ProviderName))
9197
{
92-
if (verbose)
93-
{
94-
Console.WriteLine($"Skipping {details.ProviderName} because it is present in both databases.");
95-
}
98+
Logger.Info($"Skipping {details.ProviderName} because it is present in both databases.");
9699
}
97100
else
98101
{
99-
if (verbose)
100-
{
101-
Console.WriteLine($"Copying {details.ProviderName} because it is present in second db but not first db.");
102-
}
103-
102+
Logger.Info($"Copying {details.ProviderName} because it is present in second db but not first db.");
104103
newDbContext.ProviderDetails.Add(new ProviderDetails
105104
{
106105
ProviderName = details.ProviderName,
@@ -117,16 +116,15 @@ private static void DiffDatabase(string dbOne, string dbTwo, string newDb, bool
117116

118117
newDbContext.SaveChanges();
119118

120-
if (providersCopied.Count > 0)
121-
{
122-
Console.WriteLine("Providers copied to new database:");
123-
Console.WriteLine();
124-
LogProviderDetailHeader(providersCopied.Select(p => p.ProviderName));
119+
if (providersCopied.Count <= 0) { return; }
120+
121+
Logger.Info($"Providers copied to new database:");
122+
Logger.Info($"");
123+
LogProviderDetailHeader(providersCopied.Select(p => p.ProviderName));
125124

126-
foreach (var provider in providersCopied)
127-
{
128-
LogProviderDetails(provider);
129-
}
125+
foreach (var provider in providersCopied)
126+
{
127+
LogProviderDetails(provider);
130128
}
131129
}
132130
}

src/EventLogExpert.EventDbTool/EventLogExpert.EventDbTool.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
1112
<PackageReference Include="System.CommandLine" />
1213
</ItemGroup>
1314

0 commit comments

Comments
 (0)