diff --git a/EonaCat.Logger.sln b/EonaCat.Logger.sln
index c8c9069..9375bee 100644
--- a/EonaCat.Logger.sln
+++ b/EonaCat.Logger.sln
@@ -5,8 +5,6 @@ VisualStudioVersion = 17.3.32811.315
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EonaCat.Logger", "EonaCat.Logger\EonaCat.Logger.csproj", "{DCD1D32E-0F24-4D0F-A6B6-59941C0F9BB7}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EonaCat.Logger.Test.Console", "Testers\EonaCat.Logger.Test.Console\EonaCat.Logger.Test.Console.csproj", "{8993DE28-C729-417A-99C3-DAF80F32590B}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EonaCat.Logger.Test.Web", "Testers\EonaCat.Logger.Test.Web\EonaCat.Logger.Test.Web.csproj", "{DBEEF0B0-68AF-4A98-80B9-17FFCDB96E38}"
EndProject
Global
@@ -31,18 +29,6 @@ Global
{DCD1D32E-0F24-4D0F-A6B6-59941C0F9BB7}.Release|x64.Build.0 = Release|Any CPU
{DCD1D32E-0F24-4D0F-A6B6-59941C0F9BB7}.Release|x86.ActiveCfg = Release|Any CPU
{DCD1D32E-0F24-4D0F-A6B6-59941C0F9BB7}.Release|x86.Build.0 = Release|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Debug|x64.ActiveCfg = Debug|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Debug|x64.Build.0 = Debug|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Debug|x86.ActiveCfg = Debug|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Debug|x86.Build.0 = Debug|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Release|Any CPU.Build.0 = Release|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Release|x64.ActiveCfg = Release|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Release|x64.Build.0 = Release|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Release|x86.ActiveCfg = Release|Any CPU
- {8993DE28-C729-417A-99C3-DAF80F32590B}.Release|x86.Build.0 = Release|Any CPU
{DBEEF0B0-68AF-4A98-80B9-17FFCDB96E38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DBEEF0B0-68AF-4A98-80B9-17FFCDB96E38}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DBEEF0B0-68AF-4A98-80B9-17FFCDB96E38}.Debug|x64.ActiveCfg = Debug|Any CPU
diff --git a/EonaCat.Logger/EonaCat.Logger.csproj b/EonaCat.Logger/EonaCat.Logger.csproj
index b670156..4a24b5b 100644
--- a/EonaCat.Logger/EonaCat.Logger.csproj
+++ b/EonaCat.Logger/EonaCat.Logger.csproj
@@ -3,7 +3,7 @@
.netstandard2.1; net6.0; net7.0; net8.0; net4.8;
icon.ico
latest
- 1.3.0
+ 1.3.1
EonaCat (Jeroen Saey)
true
EonaCat (Jeroen Saey)
@@ -24,7 +24,7 @@
- 1.3.0+{chash:10}.{c:ymd}
+ 1.3.1+{chash:10}.{c:ymd}
true
true
v[0-9]*
@@ -52,7 +52,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/EonaCat.Logger/EonaCatCoreLogger/Extensions/FileLoggerFactoryExtensions.cs b/EonaCat.Logger/EonaCatCoreLogger/Extensions/FileLoggerFactoryExtensions.cs
index f5a888b..d0e83b2 100644
--- a/EonaCat.Logger/EonaCatCoreLogger/Extensions/FileLoggerFactoryExtensions.cs
+++ b/EonaCat.Logger/EonaCatCoreLogger/Extensions/FileLoggerFactoryExtensions.cs
@@ -49,6 +49,10 @@ public static class FileLoggerFactoryExtensions
options.IsEnabled = fileLoggerOptions.IsEnabled;
options.MaxRolloverFiles = fileLoggerOptions.MaxRolloverFiles;
options.UseLocalTime = fileLoggerOptions.UseLocalTime;
+ options.UseMask = fileLoggerOptions.UseMask;
+ options.Mask = fileLoggerOptions.Mask;
+ options.UseDefaultMasking = fileLoggerOptions.UseDefaultMasking;
+ options.MaskedKeywords = fileLoggerOptions.MaskedKeywords;
}
);
return builder;
diff --git a/EonaCat.Logger/EonaCatCoreLogger/FileLoggerOptions.cs b/EonaCat.Logger/EonaCatCoreLogger/FileLoggerOptions.cs
index b5614e0..a156261 100644
--- a/EonaCat.Logger/EonaCatCoreLogger/FileLoggerOptions.cs
+++ b/EonaCat.Logger/EonaCatCoreLogger/FileLoggerOptions.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.IO;
using EonaCat.Logger.EonaCatCoreLogger.Internal;
@@ -100,4 +101,42 @@ public class FileLoggerOptions : BatchingLoggerOptions
///
///
public string LogDirectory { get; set; } = Path.Combine(DefaultPath, "logs");
+
+ ///
+ /// Determines if we need to mask certain keywords
+ ///
+ public bool UseMask { get; set; }
+
+ ///
+ /// Determines the keywords to mask
+ ///
+ public List MaskedKeywords { get; set; } = new List();
+ public string Mask { get; set; } = "***MASKED***";
+
+ ///
+ /// Determines that if masking is enabled we also need to use the default masking options:
+ /// IP addresses
+ /// MAC addresses
+ /// Emails
+ /// Passwords
+ /// Credit card numbers
+ /// Social security numbers (SSN) and BSN (Dutch Citizen Service Number)
+ /// API keys/tokens
+ /// Phone numbers (generic and Dutch specific)
+ /// Dates of birth (DOB) or other date formats
+ /// IBAN/Bank account numbers (generic and Dutch specific)
+ /// JWT tokens
+ /// URLs with sensitive query strings
+ /// License keys
+ /// Public and private keys (e.g., PEM format)
+ /// Dutch KVK number (8 or 12 digits)
+ /// Dutch BTW-nummer (VAT number)
+ /// Dutch driving license number (10-12 characters)
+ /// Dutch health insurance number (Zorgnummer)
+ /// Other Dutch Bank Account numbers (9-10 digits)
+ /// Dutch Passport Numbers (9 alphanumeric characters
+ /// Dutch Identification Document Numbers (varying formats)
+ /// Custom keywords specified in LoggerSettings
+ ///
+ public bool UseDefaultMasking { get; set; } = true;
}
\ No newline at end of file
diff --git a/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLogger.cs b/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLogger.cs
index 7a59919..df0cefa 100644
--- a/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLogger.cs
+++ b/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLogger.cs
@@ -57,12 +57,10 @@ namespace EonaCat.Logger.EonaCatCoreLogger.Internal
message = LogHelper.FormatMessageWithHeader(_loggerSettings, logLevel.FromLogLevel(), message, timestamp.DateTime, category)
+ Environment.NewLine;
- _provider.AddMessage(timestamp, message);
-
var currentMessage = new EonaCatLogMessage
{
DateTime = timestamp.DateTime,
- Message = message,
+ Message = _provider.AddMessage(timestamp, message),
LogType = logLevel.FromLogLevel(),
Origin = string.IsNullOrWhiteSpace(_loggerSettings.LogOrigin) ? "BatchingLogger" : _loggerSettings.LogOrigin
};
diff --git a/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLoggerProvider.cs b/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLoggerProvider.cs
index 3b92201..4364cab 100644
--- a/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLoggerProvider.cs
+++ b/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLoggerProvider.cs
@@ -38,6 +38,7 @@ public abstract class BatchingLoggerProvider : ILoggerProvider, IDisposable
if (options.Value is FileLoggerOptions fileLoggerOptions)
{
UseLocalTime = fileLoggerOptions.UseLocalTime;
+ UseMask = fileLoggerOptions.UseMask;
}
_batchSize = loggerOptions.BatchSize;
@@ -61,6 +62,7 @@ public abstract class BatchingLoggerProvider : ILoggerProvider, IDisposable
_loggerSettings = new LoggerSettings();
_loggerSettings.UseLocalTime = UseLocalTime;
+ _loggerSettings.UseMask = UseMask;
return _loggerSettings;
}
@@ -68,6 +70,7 @@ public abstract class BatchingLoggerProvider : ILoggerProvider, IDisposable
}
public bool IsStarted { get; set; }
+ public bool UseMask { get; set; }
public void Dispose()
{
@@ -126,18 +129,198 @@ public abstract class BatchingLoggerProvider : ILoggerProvider, IDisposable
protected async Task WriteStartMessage()
{
var message = LogHelper.GetStartupMessage();
- await WriteMessagesAsync(new List { new LogMessage() { Message = message, Timestamp = CurrentDateTimeOffset } }, _cancellationTokenSource.Token).ConfigureAwait(false);
+ await WriteMessagesAsync(new List { CreateLoggerMessage(message, CurrentDateTimeOffset) }, _cancellationTokenSource.Token).ConfigureAwait(false);
+ }
+
+ private LogMessage CreateLoggerMessage(string message, DateTimeOffset currentDateTimeOffset)
+ {
+ var result = new LogMessage() { Message = message, Timestamp = currentDateTimeOffset };
+
+ if (LoggerSettings != null && LoggerSettings.UseMask)
+ {
+ // Masking sensitive information
+ result.Message = MaskSensitiveInformation(result.Message);
+ }
+
+ return result;
+ }
+
+ ///
+ /// Masks sensitive information within the provided message string.
+ /// This method is virtual and can be overridden to customize masking behavior.
+ ///
+ /// The log message potentially containing sensitive information.
+ /// The masked log message.
+ protected virtual string MaskSensitiveInformation(string message)
+ {
+ if (string.IsNullOrEmpty(message))
+ {
+ return message;
+ }
+
+ if (LoggerSettings != null && LoggerSettings.UseDefaultMasking)
+ {
+ // Mask IP addresses
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b(?:\d{1,3}\.){3}\d{1,3}\b(?!\d)",
+ LoggerSettings.Mask);
+
+ // Mask MAC addresses
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b(?:[0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}\b",
+ LoggerSettings.Mask);
+
+ // Mask emails
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b",
+ LoggerSettings.Mask,
+ System.Text.RegularExpressions.RegexOptions.IgnoreCase);
+
+ // Mask passwords
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"(?i)(password\s*[:= ]\s*|pwd\s*[:= ]\s*)[^\s]+",
+ $"password={LoggerSettings.Mask}");
+
+ // Mask credit card numbers
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b(?:\d{4}[ -]?){3}\d{4}\b",
+ LoggerSettings.Mask);
+
+ // Mask social security numbers (SSN) and BSN (Dutch Citizen Service Number)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b\d{3}-\d{2}-\d{4}\b|\b\d{9}\b",
+ LoggerSettings.Mask); // SSN (USA)
+
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b\d{9}\b",
+ LoggerSettings.Mask); // BSN (Dutch)
+
+ // Mask passwords (Dutch)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"(?i)(wachtwoord\s*[:= ]\s*|ww\s*=\s*)[^\s]+",
+ $"wachtwoord={LoggerSettings.Mask}");
+
+ // Mask API keys/tokens
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b[A-Za-z0-9-_]{20,}\b",
+ LoggerSettings.Mask);
+
+ // Mask phone numbers (generic and Dutch specific)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b(\+?\d{1,4}[-.\s]?)?(\(?\d{3}\)?[-.\s]?)?\d{3}[-.\s]?\d{4}\b",
+ LoggerSettings.Mask); // Generic
+
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b(\+31|0031|0|06)[-\s]?\d{8}\b",
+ LoggerSettings.Mask); // Dutch
+
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b(\+32|0032|0|06)[-\s]?\d{8}\b",
+ LoggerSettings.Mask); // Belgium
+
+ // Mask dates of birth (DOB) or other date formats
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b\d{2}[/-]\d{2}[/-]\d{4}\b",
+ LoggerSettings.Mask);
+
+ // Mask Dutch postal codes
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b\d{4}\s?[A-Z]{2}\b",
+ LoggerSettings.Mask);
+
+ // Mask IBAN/Bank account numbers (generic and Dutch specific)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b[A-Z]{2}\d{2}[A-Z0-9]{1,30}\b",
+ LoggerSettings.Mask); // Generic for EU and other country IBANs
+
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\bNL\d{2}[A-Z]{4}\d{10}\b",
+ LoggerSettings.Mask); // Dutch IBAN
+
+ // Mask JWT Tokens
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b[A-Za-z0-9-_]{16,}\.[A-Za-z0-9-_]{16,}\.[A-Za-z0-9-_]{16,}\b",
+ LoggerSettings.Mask);
+
+ // Mask URLs with sensitive query strings
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\bhttps?:\/\/[^\s?]+(\?[^\s]+?[\&=](password|key|token|wachtwoord|sleutel))[^&\s]*",
+ LoggerSettings.Mask,
+ System.Text.RegularExpressions.RegexOptions.IgnoreCase);
+
+ // Mask license keys
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}\b",
+ LoggerSettings.Mask);
+
+ // Mask public and private keys (e.g., PEM format)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"-----BEGIN [A-Z ]+KEY-----[\s\S]+?-----END [A-Z ]+KEY-----",
+ LoggerSettings.Mask);
+
+ // Mask Dutch KVK number (8 or 12 digits)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b\d{8}|\d{12}\b",
+ LoggerSettings.Mask);
+
+ // Mask Dutch BTW-nummer (VAT number)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\bNL\d{9}B\d{2}\b",
+ LoggerSettings.Mask);
+
+ // Mask Dutch driving license number (10-12 characters)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b[A-Z0-9]{10,12}\b",
+ LoggerSettings.Mask);
+
+ // Mask Dutch health insurance number (Zorgnummer)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b\d{9}\b",
+ LoggerSettings.Mask);
+
+ // Mask other Dutch Bank Account numbers (9-10 digits)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b\d{9,10}\b",
+ LoggerSettings.Mask);
+
+ // Mask Dutch Passport Numbers (9 alphanumeric characters)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b[A-Z0-9]{9}\b",
+ LoggerSettings.Mask);
+
+ // Mask Dutch Identification Document Numbers (varying formats)
+ message = System.Text.RegularExpressions.Regex.Replace(message,
+ @"\b[A-Z]{2}\d{6,7}\b",
+ LoggerSettings.Mask);
+ }
+
+ // Mask custom keywords specified in LoggerSettings
+ if (LoggerSettings?.MaskedKeywords != null)
+ {
+ foreach (var keyword in LoggerSettings.MaskedKeywords)
+ {
+ if (string.IsNullOrWhiteSpace(keyword))
+ {
+ continue;
+ }
+ message = message.Replace(keyword, LoggerSettings.Mask);
+ }
+ }
+
+ return message;
}
private async Task WriteStopMessage()
{
var message = LogHelper.GetStopMessage();
- await WriteMessagesAsync(new List { new LogMessage() { Message = message, Timestamp = CurrentDateTimeOffset } }, _cancellationTokenSource.Token).ConfigureAwait(false);
+ await WriteMessagesAsync(new List { CreateLoggerMessage(message, CurrentDateTimeOffset) }, _cancellationTokenSource.Token).ConfigureAwait(false);
}
- internal void AddMessage(DateTimeOffset timestamp, string message)
+ internal string AddMessage(DateTimeOffset timestamp, string message)
{
- _messageQueue.Enqueue(new LogMessage { Message = message, Timestamp = timestamp });
+ var result = CreateLoggerMessage(message, timestamp);
+ _messageQueue.Enqueue(result);
+ return result.Message;
}
private Task StartAsync()
diff --git a/EonaCat.Logger/Managers/LogManager.cs b/EonaCat.Logger/Managers/LogManager.cs
index 0f7d33a..3590fb4 100644
--- a/EonaCat.Logger/Managers/LogManager.cs
+++ b/EonaCat.Logger/Managers/LogManager.cs
@@ -175,6 +175,10 @@ namespace EonaCat.Logger.Managers
configuration.FileNamePrefix = fileLoggerOptions.FileNamePrefix;
configuration.MaxRolloverFiles = fileLoggerOptions.MaxRolloverFiles;
configuration.UseLocalTime = Settings.UseLocalTime;
+ configuration.UseMask = Settings.UseMask;
+ configuration.Mask = fileLoggerOptions.Mask;
+ configuration.UseDefaultMasking = Settings.UseDefaultMasking;
+ configuration.MaskedKeywords = fileLoggerOptions.MaskedKeywords;
}));
var serviceProvider = serviceCollection.BuildServiceProvider();
diff --git a/EonaCat.Logger/Managers/LoggerSettings.cs b/EonaCat.Logger/Managers/LoggerSettings.cs
index 4124f9c..3b2a8cc 100644
--- a/EonaCat.Logger/Managers/LoggerSettings.cs
+++ b/EonaCat.Logger/Managers/LoggerSettings.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Text.RegularExpressions;
using EonaCat.Logger.EonaCatCoreLogger;
using EonaCat.Logger.EonaCatCoreLogger.Models;
using EonaCat.Logger.GrayLog;
@@ -167,6 +168,44 @@ public class LoggerSettings
///
public string LogOrigin { get; set; }
+ ///
+ /// Determines if we need to mask certain keywords
+ ///
+ public bool UseMask { get; set; }
+
+ ///
+ /// Determines the keywords to mask
+ ///
+ public List MaskedKeywords { get; set; } = new List();
+ public string Mask { get; set; } = "***MASKED***";
+
+ ///
+ /// Determines that if masking is enabled we also need to use the default masking options:
+ /// IP addresses
+ /// MAC addresses
+ /// Emails
+ /// Passwords
+ /// Credit card numbers
+ /// Social security numbers (SSN) and BSN (Dutch Citizen Service Number)
+ /// API keys/tokens
+ /// Phone numbers (generic and Dutch specific)
+ /// Dates of birth (DOB) or other date formats
+ /// IBAN/Bank account numbers (generic and Dutch specific)
+ /// JWT tokens
+ /// URLs with sensitive query strings
+ /// License keys
+ /// Public and private keys (e.g., PEM format)
+ /// Dutch KVK number (8 or 12 digits)
+ /// Dutch BTW-nummer (VAT number)
+ /// Dutch driving license number (10-12 characters)
+ /// Dutch health insurance number (Zorgnummer)
+ /// Other Dutch Bank Account numbers (9-10 digits)
+ /// Dutch Passport Numbers (9 alphanumeric characters
+ /// Dutch Identification Document Numbers (varying formats)
+ /// Custom keywords specified in LoggerSettings
+ ///
+ public bool UseDefaultMasking { get; set; } = true;
+
public event LogDelegate OnLog;
private static FileLoggerOptions CreateDefaultFileLoggerOptions()
diff --git a/README.md b/README.md
index 087dea8..7385add 100644
--- a/README.md
+++ b/README.md
@@ -267,6 +267,43 @@ namespace EonaCat.Logger.Advanced
}
```
+**Code for enabling keyword masking (default: false):**
+
+```csharp
+Logger.LoggerSettings.UseMask = true;
+```
+
+Sensitive information will be replaced with ****MASKED****
+You can add additional masking keywords using the MaskedKeywords property on the LoggerSettings object
+
+You can also override the MaskSensitiveInformation method of the batchLoggingProvider to add your own masking
+
+
+Default maskings (when the masking is enabled):
+IP addresses
+MAC addresses
+Emails
+Passwords
+Credit card numbers
+Social security numbers (SSN) and BSN (Dutch Citizen Service Number)
+API keys/tokens
+Phone numbers (generic and Dutch specific)
+Dates of birth (DOB) or other date formats
+IBAN/Bank account numbers (generic and Dutch specific)
+JWT tokens
+URLs with sensitive query strings
+License keys
+Public and private keys (e.g., PEM format)
+Dutch KVK number (8 or 12 digits)
+Dutch BTW-nummer (VAT number)
+Dutch driving license number (10-12 characters)
+Dutch health insurance number (Zorgnummer)
+Other Dutch Bank Account numbers (9-10 digits)
+Dutch Passport Numbers (9 alphanumeric characters
+Dutch Identification Document Numbers (varying formats)
+Custom keywords specified in LoggerSettings
+
+
**Code for enabling GrayLog in the above *advanced* logger class:**
```csharp
diff --git a/Testers/EonaCat.Logger.Test.Web/EonaCat.Logger.Test.Web.csproj b/Testers/EonaCat.Logger.Test.Web/EonaCat.Logger.Test.Web.csproj
index 98182b7..1c07f0f 100644
--- a/Testers/EonaCat.Logger.Test.Web/EonaCat.Logger.Test.Web.csproj
+++ b/Testers/EonaCat.Logger.Test.Web/EonaCat.Logger.Test.Web.csproj
@@ -1,14 +1,14 @@
- net7.0
+ net8.0
enable
enable
-
-
+
+
diff --git a/Testers/EonaCat.Logger.Test.Web/Program.cs b/Testers/EonaCat.Logger.Test.Web/Program.cs
index 3b0d31d..45d44cf 100644
--- a/Testers/EonaCat.Logger.Test.Web/Program.cs
+++ b/Testers/EonaCat.Logger.Test.Web/Program.cs
@@ -7,6 +7,7 @@ using EonaCat.Logger.Test.Web;
using EonaCat.Web.RateLimiter;
using EonaCat.Web.RateLimiter.Endpoints.Extensions;
using EonaCat.Web.Tracer.Extensions;
+using EonaCat.Web.Tracer.Models;
var builder = WebApplication.CreateBuilder(args);
int onLogCounter = 0;
@@ -17,6 +18,7 @@ Logger logger = new Logger();
logger.UseLocalTime = true;
logger.MaxLogType = ELogType.TRACE;
logger.LoggerSettings.OnLog += LoggerSettings_OnLog;
+logger.LoggerSettings.UseMask = true;
void LoggerSettings_OnLog(EonaCatLogMessage message)
{
@@ -29,6 +31,7 @@ var options = new FileLoggerOptions();
options.MaxRolloverFiles = 5;
//options.FileSizeLimit = 1 * 1024 * 1024 / 4;
options.UseLocalTime = true;
+options.UseMask = true;
builder.Logging.AddEonaCatFileLogger(fileLoggerOptions: options, filenamePrefix: "web");
builder.Services.AddRazorPages();
@@ -94,12 +97,7 @@ if (!app.Environment.IsDevelopment())
//{
// await httpContext.Response.WriteAsync("THIS IS MY CUSTOM RATE LIMIT MESSAGE");
//}
-WebTracer.OnLog += WebTracer_OnLog;
-void WebTracer_OnLog(object? sender, string e)
-{
- Console.WriteLine(e);
-}
//app.UseWebTracer();
app.UseHttpsRedirection();
@@ -135,6 +133,7 @@ void RunLoggingExceptionTests()
}
}
+await Task.Run(RunMaskTest).ConfigureAwait(false);
await Task.Run(RunWebLoggerTestsAsync).ConfigureAwait(false);
await Task.Run(RunWebLoggingTests).ConfigureAwait(false);
await Task.Run(RunLoggingTestsAsync).ConfigureAwait(false);
@@ -183,6 +182,29 @@ async void RunWebLoggingTests()
}
}
+async void RunMaskTest()
+{
+ if (!Directory.Exists(logger.LogFolder))
+ {
+ Directory.CreateDirectory(logger.LogFolder);
+ }
+
+ for (var i = 0; i < 9000000; i++)
+ {
+ var message = $"mask-test {i}";
+ app.Logger.LogInformation("password: test");
+ app.Logger.LogInformation("JWT Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c");
+ app.Logger.LogInformation("JWT Token2: eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.iOeNU4dAFFeBwNj6qdhdvm-IvDQrTa6R22lQVJVuWJxorJfeQww5Nwsra0PjaOYhAMj9jNMO5YLmud8U7iQ5gJK2zYyepeSuXhfSi8yjFZfRiSkelqSkU19I-Ja8aQBDbqXf2SAWA8mHF8VS3F08rgEaLCyv98fLLH4vSvsJGf6ueZSLKDVXz24rZRXGWtYYk_OYYTVgR1cg0BLCsuCvqZvHleImJKiWmtS0-CymMO4MMjCy_FIl6I56NqLE9C87tUVpo1mT-kbg5cHDD8I7MjCW5Iii5dethB4Vid3mZ6emKjVYgXrtkOQ-JyGMh6fnQxEFN1ft33GX2eRHluK9eg");
+
+ using (var file = new StreamWriter(Path.Combine(logger.LogFolder, "testmask.log"), true))
+ {
+ file.WriteAsync(message);
+ }
+ Console.WriteLine($"Masked: {i}");
+ Task.Delay(1);
+ }
+}
+
async Task RunLoggingTestsAsync()
{
var loggerSettings = new LoggerSettings();